刷题日记 DAY2

数组

leetcode 209 长度最小的子数组

暴力

把所有子数组的和等于target的求一遍然后取其长度最小值

int minSubArrayLen(int target, vector<int>& nums) {
        int lenth = nums.size();
        int min = __INT_MAX__;
        
        for(int i = 0; i < lenth; ++i) {  
            int sum = 0; 
            int count = 0;         
            for(int j = i; j < lenth; ++j) {
                sum += nums[j];
                count++;
                if(target <= sum) {
                    if(count < min)
                        min = count;
                }
            }
        }
        return min == __INT_MAX__ ? 0 : min;
    }

双指针(滑动窗口)

使用一个left指向窗口的左边界,一个right指针指向窗口的右边届,在一次循环中先将right指针不断右移增加窗口尺寸,并计算出窗口的值。当窗口的值大于等于target的值时,开始逐渐向右移动left指针不断减小窗口的尺寸,直到窗口的值不小于target,此时窗口的大小就是最小的长度值。

int minSubArrayLen(int target, vector<int>& nums) {
        int left = 0;
        int lenth = nums.size();
        int sublenth = 0;
        int sum = 0;
        int min = __INT_MAX__;
        for (int right = left; right < lenth; ++right) {
            sum += nums[right];
            while (sum >= target) {
                sublenth = right - left + 1;
                if (sublenth <= min) {
                    min = sublenth;
                }
                sum -= nums[left++];
            }
        }
        return min == __INT_MAX__ ? 0 : min;
    }

leetcode 59 螺旋矩阵II

相当于将矩阵拆成一个绕圈的一维数组,每次遍历完一行(列)就会拆掉一行(列)。

vector< vector<int> > generateMatrix(int n) {
        vector< vector<int> > res(n, vector<int>(n, 0)); 
        int lb = 0;
        int rb = n - 1;
        int ub = 0;
        int db = n - 1;
        int num = 1;
        while(num <= n * n) {
            /*左到右*/
            for(int i = lb; i <= rb; ++i) {
               res[ub][i] = num++; 
            }
            ub++;
            /*上到下*/
            for(int i = ub; i <= db; ++i) {
               res[i][rb] = num++; 
            }
            rb--;
            /*右到左*/
            for(int i = rb; i >= lb; --i) {
               res[db][i] = num++; 
            }
            db--;
            /*下到上*/
            for(int i = db; i >= ub; --i) {
               res[i][lb] = num++; 
            }
            lb++;
        
        }
        
        return res;
    }
posted on 2022-01-07 01:10  wenchester  阅读(14)  评论(0)    收藏  举报