1)在乙個有序陣列中,找某個數是否存在
2)在乙個有序陣列中,找》=某個數最左側的位置
3)在乙個有序陣列中,找<=某個數最右側的位置
4)區域性最小值問題
查詢乙個數是否存在:
package com.zy.class001;
public class code04_b***ist ;
system.out.println(exist(arr, 55));
}public static boolean exist(int arr, int num)
int l = 0;
int r = arr.length - 1;
int mid = 0;
while (l < r) else if (arr[mid] > num) else
}return arr[l] == num;}}
知識擴充套件:2*n 可以表示為 n<<1
2*n + 1 可以表示為 (n<<1) | 1
在乙個有序陣列中,找》=某個數最左側的位置
package com.zy.class001;
public class code05_bsnearleft ;
system.out.println(nearestindex(arr, 3));
}public static int nearestindex(int arr, int value) else
}return index;}}
區域性最小值:
package com.zy.class001;
public class code06_bsawesome
if (arr.length == 1 || arr[0] < arr[1])
if (arr[arr.length - 1] < arr[arr.length - 2])
int left = 1;
int right = arr.length - 2;
while (left < right) else if (arr[mid] > arr[mid + 1]) else
}return left;}}
相同為0 不同為1
異或運算的性質:
1)0^n == n n^n == 0
2)異或運算滿**換律和結合律
a = a ^ b;
b = a ^ b;
a = a ^ b;
解釋:
首先a = a ^ b;
然後b = a ^ b = a ^ b ^ b = a;
最後a = a ^ b = a ^ b ^ a = b;
結果就是b = a; a = b;
乙個陣列中有一種數出現了奇數次,其他數都出現了偶數次,怎麼找到並列印這種數。
package com.zy.class001;
public class code07_eventimesoddtimes ;
printoddtimesnum1(arr);
}// arr中,只有一種數,出現奇數次
怎麼把乙個int型別的數,提取出最右側的1來
例如:11001100-》00000100
答案:n & ((~n) + 1)
乙個陣列中有兩種數出現了奇數次,其他數都出現了偶數次,怎麼找到並列印這兩種數?
解題思路:
假設出現奇數的兩個數分別是a和b,陣列中資料全部異或,必定得到a ^ b
此時找出a ^ b的最右邊為1的位置,假設在第i位置上為1,然後將陣列分為兩部分,在i位置上為1的數和i位置為0的數。
然後將在i位置為1的所有數異或,肯定能求出其中乙個數假設為a,然後a^b^a = b,則可以求出b
**為:
package com.zy.class001;
public class code07_eventimesoddtimes ;
printoddtimesnum2(arr);
}// arr中,有兩個數,出現奇數次
public static void printoddtimesnum2(int arr)
// 對於eor,必定有乙個位置上是1,那麼我們就去求最右邊為1的位置
求n中二進位制位的1的個數。
思路:每次都求出n的最右側位置的1,然後將n中最右側的1抹掉,不斷迴圈,直到n為0
package com.zy.class001;
public class bitecount
public static int bitecount(int n)
return count;}}
開始刷題LeetCode
今天決定開始刷題,每天至少一題,如果題目確實沒有解決出來沒有關係,但是要保證每天至少接觸了一道新的題目!一定要堅持下去,現在是個菜鳥可能會感覺有點難度,堅持下去,總有一天會好的!今天是第一天,做的第乙個題目 reverse words in a string given an input strin...
leetcode刷題歷程
難度 簡單 題目 給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 ...
LeetCode刷題總結
123 4567 891011 12 元素交換 swap a 1 a 3 sort排序 sort a.begin a.end 陣列顛倒 reverse a.begin a.end 陣列元素置為0 memset a,0,a.size 陣列取值 a.push back 定義二維陣列 vector vec...