一、尋找峯值:
注意事項:
①:應該使用二分法
②:使用二分法時low和high的改變原因及改變方式。
if(nums[mid] > nums[mid + 1]) high = mid;
else if(nums[mid] < nums[mid + 1]) low = mid + 1;
二、有效的括號:
注意事項:
問題不大
三、合併K個排序鏈表:
注意事項:
①:將問題分解,將合併n個排序鏈表轉化成合並兩個排序鏈表。要新建一個子程序來做這件事。
②:注意合併之後的鏈表是從小到大排序的。
四、環形鏈表:
注意事項:
麼的問題
五、旋轉數組:
注意事項:
麼的問題
六、環形鏈表Ⅱ:
注意事項:
麼的問題
七、x的平方根:
注意事項:
問題不大
八、搜索旋轉排序數組:
注意事項:
①:在尋找旋轉點下標的子程序中,要注意咯low和high的賦值及複製條件
②:當旋轉點兩邊都沒有相關點時,應該返回的是-1,而不是加起來的和0。
九、在排序數組中查找元素的第一個和最後一個位置:
注意事項:
問題不大
十、搜索旋轉排序數組 II:
注意事項:
數組中有重複元素,所以在找旋轉點時,如果數組首、中、尾三點值相等,那麼不能使用二分查找,退化成順序查找。
if(nums[low] == nums[mid] && nums[mid] == nums[high]){
for(int i = low;i < high - 1;i++) {
if(nums[i] <= nums[i + 1] && nums[i + 1] > nums[i + 2]) return i + 2;//返回 i + 2表示的是旋轉點的下標
}
}
十一、移除鏈表元素:
注意事項:
鏈表節點的刪除方法。
十二、移除元素:
注意事項:
問題不大
十三、尋找旋轉排序數組中的最小值:
注意事項:
使用二分法時low和high的改變原因及改變方式。
while(low < high){
mid = low + ((high - low) >> 1);
if(nums[mid] > nums[high]){
low = mid + 1;
}else{
high = mid;
}
}
十四、設計哈希集合:
注意事項:
①:由於設計的是Set集合,所以存儲的元素都是不相同的,所以刪除的時候要將所有的該元素全部刪去。
十五、只出現一次的數字:
注意事項:
麼的問題
十六、存在重複元素:
注意事項:
注意在向set內添加元素的時候就要判斷該元素是不是重複元素。
十七、存在重複元素 II:
注意事項:
使用set集合存儲比map存儲更好。
十八、字符串中的第一個唯一字符:
注意事項:
麼的問題
十九、 同構字符串:
注意事項:
在使用HashMap方法(key存s的字符,value存t的字符)做此題時,要注意判斷條件:如果HashMap的key中存在s的第i個字符,那麼判斷這個key對應的value是不是t的第i個字符;如果HashMap的key中不存在s的第i個字符,那麼判斷t的第i個字符在HashMap中存不存在;最後不要忘記將s和t的第i個字符加入HashMap中。
二十、顏色分類:
注意事項:
注意cur是可以等於blue的。
二十一、兩個數組的交集:
注意事項:
問題不大
二十二、 兩個數組的交集 II:
注意事項:
問題不大