100万个数字,其中只有两个不同,如何找出这两个数字?

回答·42
最热
最新
  • 我总是无所谓的状态 像个刺猬一样竖起尖刺不让人靠近 可我心里难过得要命 我笨笨的 但你别拿我的性格和痛处说我 我看起来很独立 什么都无所谓 你知道的 其实我很脆弱 能不能不要离开我
  • 为什么要找出这两个字的不同一个一个字的找,绝对可以找得出来
  • 为什么要找出这两个数来?
  • 告诉大家一个方法,在 Boss社区上面评论回复超过15个字以上会有活跃度和曝光度,就像我这样
  • 可以使用异或运算来解决这个问题。将所有的数字进行异或,最终得到的结果就是两个不同数字的异或结果。因为两个不同的数字至少有一位是不同的,所以异或结果中至少有一位是1,可以根据这一位将所有数字分为两组,一组该位为1,另一组该位为0。这两个不同的数字必定分别在这两组中,然后再对每组中的数字进行异或操作,就能得到这两个不同的数字了。 具体步骤如下: 将所有数字进行异或,得到结果为result。 找到result中第一个为1的位,记为第n位。 将所有数字按照第n位为0或1分为两组,分别异或得到两个结果,记为result1和result2。 result1和result2即为两个不同的数字。 Java代码实现如下: plaintext Copy code public static void findTwoDifferentNumbers(int[] nums) {     int result = 0;     for (int num : nums) {         result ^= num;     }     int n = 0;     while ((result & 1) == 0) {         result >>= 1;         n++;     }     int result1 = 0, result2 = 0;     for (int num : nums) {         if (((num >> n) & 1) == 0) {             result1 ^= num;         } else {             result2 ^= num;         }     }     System.out.println("两个不同的数字为:" + result1 + "和" + result2); }
  • 告诉大家一个方法、在 Boss社区上面评论回复超过15个字以上会有活跌度和曝光度、就像我这样
  • 获取前五位数字,记录出最多个数的是那个数字 然后创建两个integer变量,循环100万次,把那两变量从null改变成找出来的数字就行了
  • 告诉大家一个方法,在 Boss社区上面评论回复超过15个字以上会有活跌度和曝光度,就像我这样
  • Java #define NUM 3 #define SOURCE 1000001 int list[NUM][2];//NUM为几个不同数+1 int vist[SOURCE];//SOURCE为源数据个数+1 int i=0,j=0,k=0,m=0,n=0; //计数 for(i=0;i<SOURCE;i++){ if(k==0){ //首次记录 list[k][0]=vist[i]; list[k][1]=1; k++; } else if((k+n)<NUM){ if(m==0) //未找到相同数计数方法 { for(j=0;j<k;j++) { if(list[j][0]==vist[i]) { list[j][1]++; if(list[j][1]==NUM) { m=j; //找到相同 //找不同数中相同次数,如两个不同数都是1,1会计数两次 for(j=0;j&lt;k;j++) { n+=list[j][1]; } //不同数计数 n-=NUM; //不同数多余计数 n-=k; } break; } else { //k次不同数记录 list[k][0]=vist[i]; list[k][1]=1; k++; break; } } } else if(list[m][0]!=vist[i]) { //找到相同数计数方法 //k次不同数记录 list[k][0]=vist[i]; list[k][1]=1; k++; } } else { break; } } //遍历list取不同 for(i=0,i<k;i++){ if(list[i][1]
  • 二叉树用二分查找很快能查出来