首页 > 其他分享 >刷题 LeetCode 977 209 59

刷题 LeetCode 977 209 59

时间:2022-10-13 22:45:06浏览次数:75  
标签:977 count int 59 matrix 209 ++ depth side

代码随想录

LeetCode 977 有序数组的平方
carl

数组 #双指针

思路

  • 利用有序条件,新的大值在旧数组的两端产生,因此考虑相向指针

细节

  • 涉及3个指针,注意每个指针的更新时机

LeetCode 209 长度最小的子数组
carl

滑动窗口 #数组 #双指针

思路

  • 求解连续变化区间的最值,适合用滑动窗口
  • 滑动窗口快慢指针的变化条件,一个负责增大,一个负责减少

细节

  • 使用下标间距计数,单独定义count反而容易出错,因为要多更新一个变量

LeetCode 59 螺旋矩阵 II
carl

数组 #二维数组 #循环不变量 #区间

思路

  • 循环不变量思想确实能避免出错,很好用
  • 找规律,上下左右起始下标边长深度的关系
  • 用边长写循环,每次减2,只要边长大于0就循环,深度就是(n - side) / 2,一定除得尽
  • 胜过用深度写循环,因为边长奇偶未知导致要考虑边长计算时,整型除法取整是否正确

细节

  • 循环不变量,很受用,让所有区间的左右开闭保持一致
    ![[Pasted image 20221013221913.png]]
class Solution {
public:
    vector<vector<int>> generateMatrix(int n) {
		// -------------------------------------------- 细节1 二维vector如何初始化
        vector<vector<int>> matrix(n, (vector<int>(n, 0)));

        int count = 1;
        for(int side = n; side > 0; side -= 2){ // ---- 细节2 使用边长作循环
            int depth = (n - side) / 2;
            if(side == 1){ // ------------------------- 边界条件
                matrix[depth][depth] = count;
                break;
            }

            // up
            for(int i = 0; i < side - 1; ++i){
                matrix[depth][depth + i] = count++;
            }

            // right
            for(int i = 0; i < side - 1; ++i){
                matrix[depth + i][depth + side - 1] = count++;
            }

            // down
            for(int i = 0; i < side - 1; ++i){
                matrix[depth + side - 1][depth + side - 1 - i] = count++;
            }

            // left
            for(int i = 0; i < side - 1; ++i){
                matrix[depth + side - 1 - i][depth] = count++;
            }
        }
        return matrix;
    }
};

标签:977,count,int,59,matrix,209,++,depth,side
From: https://www.cnblogs.com/nsf1010/p/16789997.html

相关文章

  • 【H5】209-可能这些是你想要的H5软键盘兼容方案
    本文原载于SegmentFault专栏作者:wuwhs整理编辑:SegmentFault作者最近一段时间在做 ​​H5​​聊天项目,过程中踩过一个大坑:输入框获取焦点,软键盘弹起,要求输入框吸附(或顶)在输......
  • 代码随想录训练营第二天 |977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II
    今天是训练营第二天,包含了第一天双指针的扩展题977.有序数组的平方classSolution{publicint[]sortedSquares(int[]nums){intn=nums.length;......
  • 59. 螺旋矩阵 II
    59.螺旋矩阵II给你一个正整数 n,生成一个包含1到 n2 所有元素,且元素按顺时针顺序螺旋排列的 nxn正方形矩阵matrix。示例1:输入:n=3输出:[[1,2,3],[8,......
  • 209. 长度最小的子数组
    209.长度最小的子数组给定一个含有 n 个正整数的数组和一个正整数target。找出该数组中满足其和≥target的长度最小的连续子数组 [numsl,numsl+1,...,numsr-1......
  • leet Code [59. Spiral Matrix II]
    [59.SpiralMatrixII][(https://leetcode.cn/problems/spiral-matrix-ii/)螺旋矩阵其实此题并没有设计什么灵活的算法,只是对模拟的要求高。本题需要考虑的边界条件......
  • CF859G Circle of Numbers 解题报告
    CF859GCircleofNumbers解题报告:更好的阅读体验题意有一个长度为\(n\)的圆环,每个整点位置都有一个整数\(\in\{0,1\}\),你可以选择一个\(c\midn\)以及一个\(d<c......
  • leet Code [209. Minimum Size Subarray Sum]
    [209.MinimumSizeSubarraySum][(https://leetcode.cn/problems/minimum-size-subarray-sum/)暴力解法两个for循环,不断寻找符合条件的子序列classSolution{pu......
  • leet Code 977. Squares of a Sorted Array_network
    [977.SquaresofaSortedArray][(https://leetcode.cn/problems/squares-of-a-sorted-array/)暴力解法对数组中每个元素平方后再排序代码如下:classSolution......
  • 力扣594(java&python)-最长和谐子序列(简单)
    题目:和谐数组是指一个数组里元素的最大值和最小值之间的差别正好是1。现在,给你一个整数数组nums,请你在所有可能的子序列中找到最长的和谐子序列的长度。数组的子序......
  • JAVA 进阶第一阶段 59-69
    10/10号笔记用private在类中定义的成员变量只有在这个类的内部才支持访问和编写public公共的用这个定义的在任何地方都可以访问 比如publiccalssclock 、定义......