代码随想录1.22

文章目录

    • 704 二分查找
    • 27 移除元素
    • 977 有序数组的平方
    • 209 长度最小的数组
    • 59.螺旋矩阵II
    • 58 区间和

704 二分查找

注意定义一个计数器,判断循环结束,不然会超时

27 移除元素

双指针,用一个快指针一个慢指针,判断条件是快指针指向的数字不等于目标值的时候,给慢指针赋值

977 有序数组的平方

双指针,一个从左边查找一个从右边茶轴,需要注意的是,要从结果数组的右边开始赋值,因为数组的两端的平方大于中间的平方

209 长度最小的数组

滑动窗口,移动窗口的左右两个指针,在总和里面加右指针元素,减左指针元素

class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) {
        int res = 10000;
        int left = 0;
        int right = 0;
        int sum = 0;
        for(int right=0; right < nums.size(); right++){
            sum += nums[right];
            while(sum>=target){
                left++;
                sum -=nums[left];
                res = res<(right-left+1)?res:(right-left+1);
            }
        }
        if(res == 10000){
            return 0;
        }
        else{
            return res;
        }
    }
};

59.螺旋矩阵II

  1. 总体思路就是在每个转圈的循环中,依次写四个for循环,模拟转一圈
  2. 转圈的循环圈数就是大循环终止条件
  3. 每次转圈循环中,需要控制每一条边遍历的长度,每次循环右边界收缩一位
  4. 分奇偶,奇偶影响的是矩阵最中间的是否要单独赋值
class Solution {
public:
    vector<vector<int>> generateMatrix(int n) {
        vector<vector<int>> res(n,vector<int> (n,0));
        int startx = 0, starty=0;
        int offlen = 1;
        int cnt = 1;
        for(int loop = n/2; loop > 0; loop--){
            int i=startx;
            int j=starty;
            for(j;j<n-offlen;j++){
                res[i][j]=cnt;
                cnt++;
            }
            for(i;i<n-offlen;i++){
                res[i][j]=cnt;
                cnt++;
            }
            for(;j>startx;j--){
                res[i][j]=cnt;
                cnt++;
            }
            for(;i>starty;i--){
                res[i][j]=cnt;
                cnt++;
            }
            offlen++;
            startx++;
            starty++;
        }
        if(n%2){
            res[n/2][n/2]=cnt;
        }
        return res;
    }
};

58 区间和

  1. 在头文件添加vector,代码中用容器去声明数组:std::int nums(length)
  2. 计算数组中第a个元素-第b个元素时,如果用暴力求和会超时,在输入数组元素时候就边输入边计算前i个元素之和并存在一个新数组中,之后用新数组的第b个-第a个,复杂度就是O(1)

你可能感兴趣的:(代码随想录跟练记录,算法,数据结构,c++,力扣)