1.二分算法
在这里插入图片描述
边界开闭 左闭右闭 原则

这里的,middle不是要找的值。那么nums【middle】>tager
我们要更新右边界为middle-1 (因为要左区间 所以更新右边界)
在这里插入图片描述
在这里插入图片描述

class Solution {
public:
    int search(vector<int>& nums, int target) {
        int left = 0, right = nums.size() - 1;
        while (left <= right) {
            int mid = (right - left) / 2 + left;
            int num = nums[mid];
            if (num == target){
                return mid;
            }else if ( num>target )
            right = mid -1;
            else {
                left =mid + 1;
            }
          
        }
        return -1;

    }
};

2.移除元素
双指针法
1.明确两指针代表什么意思
fast:新数组里所需要的元素
获取到新数组所需要的元素之后 赋值给新数组
slow:指向更新 新数组下标的位置
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
把新数组所需要的值赋值给新数组所在的位置
更新完之后 slow++ 到下一个(3)的位置
在这里插入图片描述

class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        int n = nums.size();
        int slow = 0;
        for(int fast =0;fast <n; fast++){
            if (nums[fast] != val){
                nums[slow] = nums[fast];
                slow++;
            }
        }
        return slow;

    }
};

3.有序数组的平方
根据特性一定是取完平方后在两边取最大值
双指针由大到小从中间合拢得到一个数组
在这里插入图片描述
i < = j i=j包含中间的元素 否则缺少了一个元素
()最后不写 因为要看i++与j–那个位置上的元素更大 要不然无法判断先i++ 还是j—-
不能写在循环条件里的
在这里插入图片描述
209.长度最小的子数组

滑动窗口 利用一个for循环

循环里面代表的是滑动窗口的终止位置,还是起始位置
确定j代表终止位置,那么难点在于i起始位置怎么移动
当集合》=S 后 ,说明这个集合满足条件了,我们移动起始位置,开始缩小集合
在这里插入图片描述
用while来持续移动

59.螺旋矩阵
在这里插入图片描述

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部