704 Binary Search
题目中需要注意的:
Sorted in ascending order
All are unique
代码(左闭右开)
重点:
while区间:当为左闭右开时,如果left = right, [left, right)是一个空集,无意义,所以应该为left < right
给左右附值时,因为右边为开,所以搜索的过程中不包括右边界的值,right = mid;左边为闭, 包括在其中,所以不应该再搜索一遍,left = mid + 1
*Leetcode35 注意返回left的值为(mid +1)
Leetcode 34
注意:
注意最后返回值的时候会出现一直找不到出界的问题,所以需要加上left < nums.size()和right > 0; 在找右边界的时候有两点需要注意:
1)right为开,所以right是不能=0的,所以当写right >= 0的时候出现很多问题
2)需要用left-1去跟target的值做比较(写34的时候就出现过这个问题,下次一定要注意)
2.感觉这道题用左闭右闭会更好写一些,因为不用纠结最后取left的值还是right值(还没有写,不太确定)
Leetcode 27 Remove Element
暴力解法
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int k=0;
for(int i =0;i + k< nums.size(); i++){
if(nums[i] == val){
for(int j=i; j<nums.size()-1-k; j++){
nums[j] = nums[j+1];
}
k++;
i--;
}
}
return nums.size()-k;
}
};
问题:
考虑到左移,但没写出来(正确i--就可以了);没注意j的边界值
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int slow = 0;
for(int fast =0; fast < nums.size(); fast++){
if(nums[fast] != val){
nums[slow++] = nums[fast];
}
}
return slow;
}
};
注意:
快慢指针
一开始用的条件是fast == val, 会出现fast出界问题(fast为外部边界,如果先加fast就可能出现一溢出现象,如果换成固定fast每次只加一,slow进行停止或增加,就会避免这个问题)【之后试一下fast ==的情况】