一个数组中只有两个数字单独出现,其余数字都是成对出现的,请找出这两个数。
来源:互联网 发布:远程协助软件 编辑:程序博客网 时间:2024/05/17 08:21
排序:
#include<stdio.h> #include<stdlib.h> int check(int arr[], int len) //将arr[]中的数组进行异或,然后将结果返回 { int num = 0; for (int i = 0; i < len; i++) { num ^= arr[i]; } return num; } void bubble_sort(int arr[], int len) //使用冒泡排序,对整个数组进行升序 { int i = 0; int j = 0; int flag=0; for (i = 0; i < len - 1; i++) { flag = 1; for (j = 0; j < len - 1 - i; j++) { if (arr[j]>arr[j + 1]) { arr[j] = arr[j] + arr[j + 1]; arr[j + 1] = arr[j] - arr[j + 1]; arr[j] = arr[j] - arr[j + 1]; flag = 1; } } if (flag) return; } } void check_alone(int arr[], int len, int *num1, int *num2) { bubble_sort(arr, len); int i = 0; for (i = 0; i < len - 1; i+=2) //每次判断两个数 { if (arr[i] != arr[i + 1]) //如果这两个数不相等,则从中间分开,就将数组分成了两部分 { *num1 = check(arr, i + 1); *num2 = check(&arr[i + 1], len - i-1); } } } int main() { int arr[10] = { 0 }; int num1 = 0; int num2 = 0; int len=sizeof(arr) / sizeof(arr[0]); for (int i = 0; i <10; i++) { scanf("%d", &arr[i]); } check_alone(arr,len, &num1, &num2); printf("%d %d\n",num1,num2); system("pause"); return 0; }
优化:时间复杂度为O(n),空间复杂度是O(1)。
#include<stdio.h> #include<stdlib.h> int check(int arr[],int len) { int num = 0; for (int i = 0; i < len; i++) { num ^= arr[i]; } return num; } void check_alone(int arr[],int len, int *num1, int *num2) { int i = 0; int ret=check(arr, len); for (i = 0; i < 32;i++) //先找到一位为1的bit位 { if ((ret >> i) & 1) break; } while (len--) //按照这一位将数组分成两部分分别异或 { if (((arr[len] >> i) & 1) == 0) *num1 ^= arr[len]; else *num2 ^= arr[len]; } } int main() { int arr[10] = { 0 }; int num1 = 0; int num2 = 0; int len=sizeof(arr) / sizeof(arr[0]); for (int i = 0; i <10; i++) { scanf("%d", &arr[i]); } check_alone(arr,len, &num1, &num2); printf("%d %d\n",num1,num2); system("pause"); return 0; }
阅读全文
0 0
- 一个数组中只有两个数字单独出现,其余数字都是成对出现的,请找出这两个数。
- 一个数组中只有两个数字是出现一次的,其他数字都是成对出现,找出这两个数字
- 一组数字中只有两个数单独出现,其他数成对出现,找出这两个数
- 在一个数组中找出只出现一次的一个数字、两个数字,而其余数字全部成对出现。
- 一个数组中所有的数都是成对出现的只有一个或者两个数字是单独的,求这个数
- 一串数字中有两个只出现一次的数字其余都是成对相同,求这两个数
- 一组数中,有两个数字各出现了一次,其他数字都是成对出现的,请找出这两个数。
- 一组数据中只有一个数字出现了一次和 一组数据中只有两个个数字出现了一次其他所有数字都是成对出现的。请找出这个数字
- 一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。请找出这个数字。
- 一组数据中只有一个数字出现一次 ;其他所有数字都是成对出现的请找出这个数字。
- 一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。 请找出这个数字。
- 一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。 请找出这个数字。
- 一组数据中只有一个数字出现了一次,其他所有数字都是成对出现的。 请找出这个数字。
- 数组中,除了两个数字外其他数字都是成对出现,找出来着两个数字
- 一组数据中只有一个数字出现了一次。 其他所有数字都是成对出现的。请找出这个数字(数组指针的方法)
- 一个数组中只有两个数字是出现一次,其他所有数字都出现了两次,找出这两个数
- 有一组数字,有两个数字只出现一次,其他数字都是成对出现的,请找出这个数字。
- 有一组数字,有两个数字只出现一次,其他数字都是成对出现的,请找出这个数字
- 数据中心模块化:兼顾安全与节能
- 度度熊与邪恶大魔王
- HDU 1170
- php 封装函数 多种情况下 自动获取用户ip
- Python基础语法之——getattr(object, name, default)
- 一个数组中只有两个数字单独出现,其余数字都是成对出现的,请找出这两个数。
- 边缘计算促进微数据中心的兴起
- 一种不错的使用cacti的方法-dockered cacti
- 应用两大策略 降低数据中心工作复杂性
- tomcat 总结2
- c++之重载函数(一)
- 大数相乘算法(相加,相减)
- 一款成熟的数据中心模型设计
- Android图像处理之画笔特效处理