704. 二分查找 左闭右闭区间
问题1:首先是右区间的设置应设置成数组长度减一: int right = nums.length-1;
问题2.在middle计算中,我使用了移位运算符进行除2的操作,但此运算符优先级低于基本数学运算符
所以我加了小括号,之前没有注意到:mid = left + ((right-left)>>1);
问题3.一开始将left与right写反了误写成了 left-right;
class Solution {
public int search(int[] nums, int target) {
int left = 0;
int right = nums.length-1;
int mid;
while(left<=right){
mid = left + ((right-left)>>1);
if(nums[mid]==target){
return mid;
}else if(nums[mid]>target){
right = mid - 1;
}else{
left = mid +1;
}
}
return -1;
}
}
要注意的点为最后的返回的是Left,这个记住即可,我花了一些时间看题解,归纳了情况.
class Solution {
public int searchInsert(int[] nums, int target) {
int left = 0;
int right = nums.length-1;
int mid;
while(left<=right){
mid = (left + right)>>1;
if(nums[mid] == target){
return mid;
}else if(nums[mid]>target){
right = mid - 1;
}else{
left = mid + 1;
}
}
return left;
}
}
27. 移除元素
注意是nums[i] != val 不等于val值的时候才对慢指针的位置进行赋值
class Solution {
public int removeElement(int[] nums, int val) {
int j= 0;
for(int i = 0;i<nums.length;i++){
if(nums[i] != val){
nums[j] = nums[i];
j++;
}
}
return j;
}
}