算法问题-五行缺数
在给定的数据中,找出缺失的数字
第一种:在给定的有序数组中,找到缺失的数字,只缺一个,
思路,累加数字到给定n,然后减去有序数组累加的和,然后就找到了
/**
* 第一种,1-100中缺失一个数字,找出他是谁,数组 无需不重复
* 方法 1-100相加减去给定数字的结果
*
* num是给定数字,n是代表 1-n的结果集
*/
public static int findLostNum(int[] num,int n){
//比如给 num=3,res = 5 那么结果是 5-3 = 2,就是缺失的
int sum = 0;
for (int i = 1; i <=n ; i++) {
sum+=i;
}
for (int i = 0; i < num.length; i++) {
sum-=num[i];
}
return sum;
}
测试
public static void main(String[] args) {
// 1-3 ,5 = 1+2+3-5
// System.out.println(findLostNum(3,5));
}
第二种:第二种,99个数字,有偶数个重复的,一个奇数不重复的,找出这个数字
思路 异或
/**
* 第二种,99个数字,有偶数个重复的,一个奇数不重复的,找出这个数字
* 可以考虑xor(异或)
* * num是给定数字
*/
public static int findLostNum1(int[] num){
//比如给 num=3,res = 5 那么结果是 5-3 = 2,就是缺失的
int sum = 0;
for (int i = 0; i <num.length ; i++) {
sum^=num[i];
}
return sum;
}
/**
*
* @param args
*/
public static void main(String[] args) {
// 1-3 ,5 = 1+2+3-5
// System.out.println(findLostNum(3,5));
// 2 2 3
int[] num1 = {2,2,3};
System.out.println(findLostNum1(num1));
}
还有一种情况:
/**
* 还有一种是有偶数个重复度 还有俩个 不同的 奇数
* 找出这俩个奇数
* 这个就做思考题吧
*/
不恋尘世浮华,不写红尘纷扰