Algorithm to find two repeated numbers in an array, without sorting

前端 未结 24 2152
南方客
南方客 2020-11-28 06:58

There is an array of size n (numbers are between 0 and n - 3) and only 2 numbers are repeated. Elements are placed randomly in the array.

E.g. in {2, 3, 6, 1, 5, 4

24条回答
  •  生来不讨喜
    2020-11-28 07:15

    I have written a small programme which finds out the number of elements not repeated, just go through this let me know your opinion, at the moment I assume even number of elements are even but can easily extended for odd numbers also.

    So my idea is to first sort the numbers and then apply my algorithm.quick sort can be use to sort this elements.

    Lets take an input array as below

    int arr[] = {1,1,2,10,3,3,4,5,5,6,6};
    

    the number 2,10 and 4 are not repeated ,but they are in sorted order, if not sorted use quick sort to first sort it out.

    Lets apply my programme on this

    using namespace std;
    
    main()
    {
        //int arr[] = {2, 9, 6, 1, 1, 4, 2, 3, 5};
        int arr[] = {1,1,2,10,3,3,4,5,5,6,6};
    
        int i = 0;
    
        vector vec;
    
        int var = arr[0];
        for(i = 1 ; i < sizeof(arr)/sizeof(arr[0]); i += 2)
        {
                var = var ^ arr[i];
    
                if(var != 0 )
                {
                    //put in vector
                    var = arr[i-1];
                    vec.push_back(var);
                    i = i-1;
                }
                var = arr[i+1];
        }
    
        for(int i = 0 ; i < vec.size() ; i++)
            printf("value not repeated = %d\n",vec[i]);
    
    }
    

    This gives the output:

    value not repeated= 2
    
    value not repeated= 10
    
    value not repeated= 4
    

    Its simple and very straight forward, just use XOR man.

提交回复
热议问题