Algorithm: efficient way to remove duplicate integers from an array

前端 未结 30 2606
离开以前
离开以前 2020-11-22 16:03

I got this problem from an interview with Microsoft.

Given an array of random integers, write an algorithm in C that removes duplicated numbers an

30条回答
  •  萌比男神i
    2020-11-22 16:24

    One more efficient implementation

    int i, j;
    
    /* new length of modified array */
    int NewLength = 1;
    
    for(i=1; i< Length; i++){
    
       for(j=0; j< NewLength ; j++)
       {
    
          if(array[i] == array[j])
          break;
       }
    
       /* if none of the values in index[0..j] of array is not same as array[i],
          then copy the current value to corresponding new position in array */
    
      if (j==NewLength )
          array[NewLength++] = array[i];
    }
    

    In this implementation there is no need for sorting the array. Also if a duplicate element is found, there is no need for shifting all elements after this by one position.

    The output of this code is array[] with size NewLength

    Here we are starting from the 2nd elemt in array and comparing it with all the elements in array up to this array. We are holding an extra index variable 'NewLength' for modifying the input array. NewLength variabel is initialized to 0.

    Element in array[1] will be compared with array[0]. If they are different, then value in array[NewLength] will be modified with array[1] and increment NewLength. If they are same, NewLength will not be modified.

    So if we have an array [1 2 1 3 1], then

    In First pass of 'j' loop, array[1] (2) will be compared with array0, then 2 will be written to array[NewLength] = array[1] so array will be [1 2] since NewLength = 2

    In second pass of 'j' loop, array[2] (1) will be compared with array0 and array1. Here since array[2] (1) and array0 are same loop will break here. so array will be [1 2] since NewLength = 2

    and so on

提交回复
热议问题