一、有99個不重複的正整數組成的無序陣列,數值範圍是1~100,求出缺失的乙個1~100中的正整數。
解:1.對1~100這100個數字求和,得到sum;
2.用sum依次減去無序陣列中的每個值,最後sum的值就是缺失的那個正整數。
public static int findnum(int arr, int len)
for (int i = 0; i < arr.length; i++)
return sum;
}
二、乙個無序陣列裡有若干個正整數,範圍是1~100,其中99個都出現了偶數次,只有乙個出現了奇數次,找出這個出現奇數次的數。
解:1.定義乙個初始值為0的整數num;
2.用num依次異或每乙個數;
3.num的最終值就是那個出現奇數次的數。
public static int findnum2(int arr)
return num;
}
三、如果上面一題中有兩個出現了奇數次的數,找出這兩個數。
解:1.先依次異或,得到num;
2.找出num中任意乙個非0的位置,設該位置為x;
3.要找的兩個數的x位置必然不相等,所以通過x位置的不同,將陣列中的資料分成兩部分;
4.要找的兩個數必然被分到了這兩部分中,按照上一題的方式即可求解。
public static int findnum2(int arr)
// 找的位置x的(n是x的權)
int n = 1;
// 按位與,不等於0的時候就是不為0的位置了
while (0 == (num & n))
int res = ;
foreach (int value in arr)
else
}return res;
}
查詢缺失的數
有這樣乙個陣列,它包含 1 n 中的 n 1 個數,缺少的那個數不知道,怎樣才能找到那個數?這裡有兩種方法實現上述問題。1.對所有數求和之後用原有的總和去減即可 2.利用異或運算 由於異或的原理是相同則為0,所以,首先異或1到n中的每個數,接著利用所得到的結果異或陣列中的 n 1 個數,最終得到的那...
查詢表的缺失範圍
有表如下 go 物件 table dbo t1 指令碼日期 12 21 2008 22 29 59 set ansi nulls on goset quoted identifier on gocreate table dbo t1 col1 int not null,primary key clu...
陣列中缺失的最小正整數
華電北風吹 日期 2016 2 24 題目描述 對乙個未排序的陣列,找出缺失的最小正整數。例如,對於陣列 1,2,0 返回3 對於陣列 3,4,1,1 返回2。演算法時間複雜度應該為o n 和常數的空間複雜度。解析 一 如果陣列重元素沒有重複 借助於快排把資料劃分在給定元素左右,這裡選擇輸入陣列的中...