LeetCode 704.二分查找
int search(int* nums, int numsSize, int target){
int left = 0;
int right = numsSize - 1;
while (left <= right)
{
int middle = (left + (right - left)/2);
if (nums[middle] > target)
{
right = middle - 1;
}else if (nums[middle] < target){
left = middle + 1;
}else {
return middle;
}
}
return -1;
}
掌握二分法是算法学习的第一步,二分法的步骤已经可以作为公式先行记忆,只有先记下来才能写出来,故而熟练到可以自由变化使用。
LeetCode 35 搜索插入位置
最重要的一点就是搞清楚如果数组中没有target,那么要插入的值他有可能会插入到哪里,会在头部、尾部还是中间,他们都如何来表示
nt searchInsert(int* nums, int numsSize, int target){
int left = 0;
int right = numsSize - 1;
while (left <= right)
{
int middle = (left + (right - left)/2);
if (nums[middle] > target)
{
right = middle - 1;
}else if (nums[middle] < target)
{
left = middle + 1;
}else //这里就是存在目标值时需要返回的下标
{
return middle;
}
}
//跳出循环有三种可能,下次有时间补充一下
return right+1;
}
LeetCode 27.移除元素
双指针法操作本题主要就是利用快慢指针的移动差进行操作
快指针不停向前,判断是否有需要删除的值,没有的时候慢指针才进行累加
int removeElement(int* nums, int numsSize, int val){
int fast = 0;
int slow = 0;
for (; fast < numsSize; fast++)
{
if (val != nums[fast])
{
nums[slow++] = nums[fast];
}
}
return slow;
}
实则就是将目标值的位置 覆盖为其后不为目标值的数据,慢指针最后的大小即为数组的大小,减一为数组中最后一个元素的下标。