704:二分查找
左闭右闭区间【左边,右边】
主要思想是利用二分法,[left,right],先规定middle=(left+right)/2,比较这个目标值target和nums[middle]的大小,如果target>nums[middle],说明在右边区间,将left设置为middle+1,如果target<nums[middle]说明在左边区间,将right设置为middle-1。
//C语言
int search(int* nums, int numsSize, int target) {
//左闭右闭区间
int left=0;
int right=numsSize-1;
int middle=0;
while(left<=right){
int middle=(left+right)/2;
if(nums[middle]>target){
right=middle-1;
}
else if(nums[middle]<target){
left=middle+1;
}
else if(nums[middle==target]){
return middle;
}
}
return -1;
}
27:移除元素
双指针思想
主要思想是利用双指针,将快指针用于指向新的数组所保留的元素,慢指针用于指向新数组中元素所在下下标。
//C语言
//双指针
//基本思想:快指针代表新数组也就是保留数组所需要的元素,慢指针代表新数组中元素的下标。
int removeElement(int* nums, int numsSize, int val){
int slow=0;
for(int fast=0;fast<numsSize;fast++){
if(nums[fast]!=val){
nums[slow]=nums[fast];
slow++;
}
}
return slow;
}