随想录一期 day2 [977.有序数组的平方|209. 长度最小的子数组|59.螺旋矩阵II(剥洋葱)]
977.有序数组的平方
给你一个按 非递减顺序 排序的整数数组 nums
,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
思路
- 递增数组,平方后最大值一定在最左侧或者最右侧,可想到–双指针
- 左右指针向中间靠拢,每次可以得到一个最大值,以此类推,放入结果集中
- 临界条件需要左右指针相等,不会漏掉最后一个数
复杂度
- 时间 O(n)
- 空间 O(n)
class Solution {public int[] sortedSquares(int[] nums) {int[] rt = new int[nums.length];int l = 0 ,r = nums.length-1,pos = r ;while(l<=r){int lv = nums[l] * nums[l] ;int rv = nums[r] * nums[r];if(lv < rv){rt[pos--] = rv ;--r;}else{rt[pos--] = lv ;++l;}}return rt; }
}
209. 长度最小的子数组
给定一个含有 n 个正整数的数组和一个正整数 target 。
找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。
思考
- 最小数据需要逐个判断子数据的长度,可想到滑动窗口
- 动态子数组的最小长度,可想到快慢指针,快指针得到满足条件的子数组时,移动慢指针
- 慢指针的移动需要借助循环来实现,即需要两层循环
复杂度
- 时间 O(2n)==>O(n)
- 空间 O(1)
class Solution {public int minSubArrayLen(int target, int[] nums) {int l = 0 ,r = 0 ,sum = 0, min = Integer.MAX_VALUE;while(r < nums.length){sum += nums[r];while(sum >= target){min = Math.min(min,r-l+1);sum -= nums[l++];}++r;}return min==Integer.MAX_VALUE ? 0 : min;}
}
59.螺旋矩阵II
给你一个正整数 n
,生成一个包含 1
到 n2
所有元素,且元素按顺时针顺序螺旋排列的 n x n
正方形矩阵 matrix
思考
- 按顺时针旋转,旋转一周可得到四条边,分别为上、右、下、左
- 每条边的临界值为0或者n-1,循环为左右闭区间,顾走完一条边就要把这条边消掉,(起名为剥洋葱)
- 走完一周,相当消掉一周的边,是不是很像剥洋葱,一层一层的剥开…
class Solution {public int[][] generateMatrix(int n) {//四条边left rigth top bottom 根据旋转方向得到每条边的临界值,类似洋葱剥皮// 右->做int left = 0 ;// 左->右int right = n - 1 ; // 上->下int bottom = n - 1 ; // 下->上int top = 0 ;int num = 1 ,total = n * n;int [][] res = new int[n][n];while(num <= total){//左->右 高度(top)不变for(int i = left ; i<=right ; i ++){res[top][i] = num++;}top++; //上层边消掉//上->下 右侧(right)不变for(int i = top ; i<=bottom ; i++){res[i][right] = num++;}right--; //右侧边消掉//右->左 底部(bottom)不变for(int i = right ; i>=left ; i--){res[bottom][i] = num++;}bottom--; //下层边消掉//下->上 左侧(left)不变for(int i = bottom ; i>=top ;i--){res[i][left] = num++;}left++; //左侧边消掉}return res ;}
}
随想录一期 day2 [977.有序数组的平方|209. 长度最小的子数组|59.螺旋矩阵II(剥洋葱)]相关推荐
- 977. 有序数组的平方|209. 长度最小的子数组|59. 螺旋矩阵 II
977. 有序数组的平方 原理 准备:双指针.一个空数组.双指针指向的两个元素作比较,更大的数平方之后,放入空数组的尾部空位. 图解 其实这题的指针有两种方法: 从两边向中间靠拢,得到的是由大到小的值 ...
- 代码随想录算法训练营第二天|LeetCode 977.有序数组的平方 、209.长度最小的子数组 、59.螺旋矩阵II
LeetCode 977.有序数组的平方 题目链接:977.有序数组的平方 思路: 1.先对每个数进行遍历平方,并插入新的容器中 2.对容器进行排序,返回就可以了 缺陷:开辟了新的容器空间 class ...
- 209. 长度最小的子数组(中等 数组 滑动窗口)
209. 长度最小的子数组 给定一个含有 n 个正整数的数组和一个正整数 target . 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, -, n ...
- 代码随想录第二天|977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II ,总结
(本文主要是用于个人笔记的书写,很多地方的使用可能并不专业,如需学习更加建议移步代码随想录官网代码随想录 (programmercarl.com))) 1.有序数组的平方: ----双指针法:因为平方 ...
- 代码随想录算法训练营第二天 | LeetCode977有序数组的平方 、209长度最小的子数组、 59.螺旋矩阵II
--------------------------- 977.有序数组的平方 #include <iostream> #include <algorithm> #includ ...
- 10. Leetcode 209. 长度最小的子数组 (数组-同向双指针-滑动窗口)
给定一个含有 n 个正整数的数组和一个正整数 target .找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr ...
- 代码随想录算法训练营第二天| 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II。
代码随想录算法训练营第二天| 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II. 977.有序数组的平方 209. 长度最小的子数组 59. 螺旋矩阵 II 977.有序数组的 ...
- 代码随想录算法训练营第二天| 977. 有序数组的平方、209. 长度最小子数组、59.螺旋矩阵II、数组总结
目录: 977.有序数组的平方 209.长度最小的子数组 1.暴力输出法 2.滑动窗口法 59.螺旋矩阵II 总结: 今日收获: 977.有序数组的平方 因为是递增且有负数的数组,那么他们的平方如果还 ...
- 代码随想录训练营第二天|LeetCode977.有序数组的平方、209.长度最小的子数组、59.螺旋矩阵II
day2 | LeetCode977.有序数组的平方.209.长度最小的子数组.59.螺旋矩阵II 创建时间: October 13, 2022 3:29 PM 一.今日任务 977.有序数组的平方 ...
最新文章
- 腾讯科技改版 新闻帝国必经之路
- 【PC工具】winrar解压缩装机必备软件,winRAR5.70免费无广告
- Flink从入门到精通100篇(二十二)-Apache Flink OLAP引擎性能优化及应用
- 预测流失准确率超 82%,这个功能让“防流失+促留存大于 2”
- Python-字符串格式化
- return编程python_python3 第二十一章 - 函数式编程之return函数和闭包
- metasploit 中文系统安装失败问题
- 【Contact】结构体+动态内存管理+文件存储实现简易通讯录代码
- SAP License:物料编码原则<多码还是一码>之一
- 银联支付,实现代码对接
- plc控制伺服电机 四轴攻丝机案例 该程序为plc控制伺服电机的工程案例程序,包含伺服电机接线图,包含程序流程的详细解释说明
- 坚果云根目录同步冲突解决方法
- 【EasyRL学习笔记】第五章 Proximal Policy Optimization 近端策略优化算法
- 3.2 人工智能关键技术
- python常用模块:re模块案例、subprocess
- 国产安卓和原生android,定制安卓和原生Android到底有哪些不同?真相了!
- From MAP, MLE, OLS, G-N to IEKF,EKF
- 前端开发:关于鉴权的使用总结
- CSS3—盒子模型 讲解
- 【论文阅读】Knowledge Enhanced GAN for IoT Traffic Generation