代码随想录算法训练营第二天 | Leetcode 209.长度最小的子数组 | Leetcode 59.螺旋矩阵 II | 区间和 | 开发商购买土地
209.长度最小的子数组力扣题目链接209. 长度最小的子数组 - 力扣LeetCode文档讲解209.长度最小的子数组 | 滑动窗口 | 连续子数组 | 代码随想录视频讲解拿下滑动窗口 | LeetCode 209 长度最小的子数组_哔哩哔哩_bilibili状态完成思路使用滑动窗口可以做到一次遍历就能找到符合条件的子数组publicclassSolution{publicintMinSubArrayLen(inttarget,int[]nums){intrightindex0;intleftindex0;//这里取用左闭右闭intlnums.Length;intnowsumnums[0];intansint.MaxValue;while(true){if(nowsumtarget){ans(rightindex-leftindex1ans)?(rightindex-leftindex1):ans;nowsum-nums[leftindex];leftindex;}else{rightindex;if(rightindexnums.Length)break;nowsumnums[rightindex];}}returnans10e5?ans:0;}}通过控制前后指针的移动来找到符合条件的范围并记录长度最小值59.螺旋矩阵II力扣题目链接59. 螺旋矩阵 II - 力扣LeetCode文档讲解59.螺旋矩阵II | 螺旋矩阵 | 模拟 | 循环不变量 | 代码随想录视频讲解一入循环深似海 | LeetCode59.螺旋矩阵II_哔哩哔哩_bilibili状态完成思路用边界检测的方法限制元素生成位置publicclassSolution{publicint[][]GenerateMatrix(intn){int[][]ansnewint[n][];// 初始化交错数组for(inti0;in;i)ans[i]newint[n];intx0,y0,state0;//state:0-右1-下2-左3-上// 方向向量右(0,1), 下(1,0), 左(0,-1), 上(-1,0)int[]dx{0,1,0,-1};int[]dy{1,0,-1,0};for(inti1;in*n;i){ans[x][y]i;// 计算下一位置intnxxdx[state];intnyydy[state];// 检查下一位置是否越界 或 已填充if(nx0||nxn||ny0||nyn||ans[nx][ny]!0){state(state1)%4;// 撞墙换向nxxdx[state];nyydy[state];}xnx;yny;}returnans;}}遇到的问题Leetcode要求返回的是交错数组int[][]而非二维矩阵数组int [,]需要初始化怎样能把转向逻辑写在一个 if 语句中避免大量 if-else看了文档讲解的启发找循环不变量上面这种题解我认为是遵循了条件的循环不变量即利用方向向量做到每一次需要判断的条件是一样的只需要关心向下一步填充元素直到需要转向。区间和本题为代码随想录扩充题目题目链接58. 区间和第九期模拟笔试文档讲解58. 区间和 | 前缀和 | 区间查询 | 代码随想录状态完成前缀和是什么前缀和与差分 图文并茂 超详细整理全网最通俗易懂-CSDN博客用C#实现一个类方法不从控制台输入了publicclassSolution_58{publicintqianzhuihe(intn,int[]nums,inta,intb){//前缀和数组int[]prenewint[n1];pre[0]0;intlnums.Length;for(inti0;il;i){pre[i1]nums[i]pre[i];}returnpre[b1]-pre[a];}}一些测试样例均通过publicclassProgram{publicstaticvoidMain(String[]args){Solution_58solutionnewSolution_58();// 测试案例1: nums [1,2,3,4], a1, b3, 期望结果: 9 (234)int[]nums1{1,2,3,4};intresult1solution.qianzhuihe(nums1.Length,nums1,1,3);Console.WriteLine($测试1: 区间和 [1,3] {result1}(期望: 9));// 测试案例2: nums [1,2,3,4], a0, b0, 期望结果: 1intresult2solution.qianzhuihe(nums1.Length,nums1,0,0);Console.WriteLine($测试2: 区间和 [0,0] {result2}(期望: 1));// 测试案例3: nums [1,2,3,4], a0, b3, 期望结果: 10 (1234)intresult3solution.qianzhuihe(nums1.Length,nums1,0,3);Console.WriteLine($测试3: 区间和 [0,3] {result3}(期望: 10));// 测试案例4: nums [5], a0, b0, 期望结果: 5int[]nums2{5};intresult4solution.qianzhuihe(nums2.Length,nums2,0,0);Console.WriteLine($测试4: 区间和 [0,0] {result4}(期望: 5));}}开发商购买土地本题为代码随想录扩充题目题目链接44. 开发商购买土地第五期模拟笔试文档讲解44. 开发商购买土地 | 前缀和 | 矩阵划分 | 代码随想录状态完成publicclassSolution_49{//n行数 m列数 price[i][j]表示第i行第j列的土地价格publicintSolution(intn,intm,int[,]price){//因为只能纵向和横向分,所以在纵向和横向各做一次前缀和//纵向前缀和int[]precolumnnewint[m1];precolumn[0]0;for(inti0;im;i){for(intj0;jn;j){precolumn[i1]price[j,i];}}//横向前缀和int[]prerownewint[n1];prerow[0]0;for(inti0;in;i){for(intj0;jm;j){prerow[i1]price[i,j];}}intansint.MaxValue;//纵向分割for(inti1;im;i){intnowminprecolumn[i]-precolumn[i-1];if(nowminans)ansnowmin;}//横向分割for(inti1;in;i){intnowminprerow[i]-prerow[i-1];if(nowminans)ansnowmin;}returnans;}}测试通过publicclassProgram{publicstaticvoidMain(string[]args){Solution_49snewSolution_49();intn3;intm3;int[,]price{{1,2,3},{2,1,3},{1,2,3}};Console.WriteLine(s.Solution(n,m,price));}}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2479221.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!