在数组中的2n + 1个元素中,有n个重复和一个非重复。找到不重复的

时间:2016-10-24 02:00:00

标签: java algorithm

我正在努力解决一项愚蠢的任务。链接here

基本问题如下。数组中有2n+1个元素,其中n1其他元素重复,但没有重复。我希望有效地找到非重复元素。

我当前的实现涉及最初对数组进行排序并比较并排元素以找到不重复的数组。它没有通过1个测试用例。

到目前为止,这是我的代码:

import java.util.*;

// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");

class Solution {
public int solution(int[] A) {
    // write your code in Java SE 8
    Arrays.sort(A);
    int index = 0;
    if(A.length==1){
    return A[0];
    }

        if(A[0]!=A[1]){
        return A[0];
        }


    for(int i = 1;i<A.length;i++){
        if(i==A.length-1){

            index = i;
            break;
        }

        if(A[i-1]!=A[i]&&A[i]!=A[i+1]){
            index = i;
            break;
        }

    }
    return A[index];
}
}

我只有80%的准确率。代码有什么问题?

1 个答案:

答案 0 :(得分:1)

@Saugat,我修改了你的逻辑,但有一些解释。看看这里!!!

import java.util.*;

// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");

class Solution {
public int solution(int[] A) {
    // write your code in Java SE 8
   Arrays.sort(A);
   int index = 0;
   if(A.length==1){
    return A[0];
   }
   index = A.length - 1; // if all adjacent elements are same, 
                      //then the last number has odd occurrences
   for(int i = 1;i<A.length;){
       if(A[i] != A[i-1]){
           index = i-1;
           break; // we can break as there is only one such element with odd occurrences
       }
       i = i + 2; // when adjacent alements are same, jump by 2 places
   }
   return A[index];
   }
}

您的代码无法输入,例如:A[] = {1,1,1,2,2}。预期输出应为1。我已将此案例纳入您的逻辑中。评论会对你有帮助。

快乐编码!!