![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数组
baj001
这个作者很懒,什么都没留下…
展开
-
leetcode 54. 螺旋矩阵
原题链接记录行和列定义一个列表用来记录遍历结果统计 上 下 左 右从左到右,从上到下,从右到左,从下到上 遍历矩阵,将结果add进入ans中注意:每次执行向内缩进后,判断一下 边界是否越界,例如 t 是否 还是小于 b.因为不能出现左等于右边界的情况:此时相当与重叠了class Solution { public List<Integer> spiralOrder(int[][] matrix) { //统计行和列 int row =.原创 2022-03-02 20:21:16 · 65 阅读 · 0 评论 -
leetcode59. 螺旋矩阵 II
原题链接首先要定义边界,这个边界会随着排序而改变定义边界 上 t 下 b 左 l 右 r t = 0, b = n - 1, l = 0, r = n - 1每次进行转弯的时候就要将边界收缩一次将num的值赋值给mat后,才执行num++注意:在构建mat数组的时候,注意行和列 上 哪个位置是 i ,哪个位置是上下左右参数 class Solution { public int[][] generateMatrix(int n) { int t =.原创 2022-03-02 18:22:48 · 127 阅读 · 0 评论 -
leetcode 209. 长度最小的子数组
原题链接使用滑动窗口的方法首先定义left和 sum从right为0 时,开始遍历,不断累加sum当sum满足 大于等于s 的时候,判断 ans的最小长度然后让sum 减去当前的 nums[left],然后将left++,再次进入while循环。这一步的含义是:不断变更序列的开始位置,即寻找满足sum >= s 时的 right - left + 1 的最小值能为多少最后返回ans方法一 class Solution { // 滑动窗口 public int m.原创 2022-03-02 18:01:52 · 55 阅读 · 0 评论 -
leetcode 977. 有序数组的平方
原题链接首先定义一个数组res用来存储平方之后的数组值因为将数组中的值平方之后的值,应该是最大值分布在开头和结尾,不可能分布在中间位置,因此只需比较开头结尾的值.定义 left right分别指向开头结尾使用k保存 数组的长度,将每次 nums[left] * nums[left] nums[right] * nums[right]比较的值加入到k的位置,每次加入后,应该使k–若是 nums[right] 的平方较大,则将right–反之将left++最终返回结果数组rescla.原创 2022-03-02 17:29:41 · 60 阅读 · 0 评论 -
leetcode 27. 移除元素
使用双指针,定义一个指针fast和slow 初始都为0当fast != val 的时候,将fast赋值给slow,if符合条件的时候 slow++**if条件外fast++ **//使用快慢指针class Solution { public int removeElement(int[] nums, int val) { int fast = 0; int slow = 0; int len = nums.length; ...原创 2022-03-02 17:04:03 · 60 阅读 · 0 评论 -
leetcode 367. 有效的完全平方数
使用二分查找常规做法如下关键位置:while(l <= r) class Solution { public boolean isPerfectSquare(int num) { //使用二分查找,寻找中点,若其可以实现平方为num则直接返回当前的mid long l = 0; long r = num; while(l <= r){ long mid = (l + r) / 2; ...原创 2022-03-02 16:54:34 · 54 阅读 · 0 评论 -
leetcode 69. x 的平方根
原题链接首先定义l 和 r计算中值当mid*mid小于x的时候,使用ans来记录mid,然后将l = mid + 1;若mid*mid大于x则 r = mid - 1若刚刚好为x,则直接返回mid注意此时的while判断条件是l <= r 而且 l=0 r=xclass Solution { public int mySqrt(int x) { int l = 0, r = x, ans = 0; while(l <= r){原创 2022-03-02 16:48:10 · 96 阅读 · 0 评论 -
leetcode 34. 在排序数组中查找元素的第一个和最后一个位置
原题链接以上是两种二分查找的方法,分情况使用。但是两种二分查找方法的 while(l < r) 是相同的模板1的二分查找:模板2的二分查找:两种的取中值方式不同模板1 的二分查找适合用来查找连续数组的左边界,当出现 if(nums[mid] >= target)时,直接使用 r = mid; 来记录当前的位置模板2 的二分查找适合用来查找连续数组的右边界,当出现 if(nums[mid] <= target ) 时,说明后面可能还有满足条件的数,于是继续执行, l = mid原创 2022-03-02 11:53:24 · 134 阅读 · 0 评论 -
leetcode 35. 搜索插入位置
原题链接本题要求实现查找字符串,但是与之前不同的是要求将目标值按顺序插入到列表中因此,在最后返回的时候,我们需要返回left,因为经过如下算法演变后,目标值所在位置索引就是left的位置演示:如 nums = [1,3,5,6], target = 2 其中并没有 2 ,但是进入while后,nums[mid]为3,将right = mid - 1 。则left = right 都在1 的位置,当再次取mid ,mid 还是在11的位置,nums[mid] < targt ,将left原创 2022-03-02 10:31:19 · 49 阅读 · 0 评论 -
leetcode 704. 二分查找
原题链接数组的二分查找关键在于在不同情况下对中值的处理当nums[mid] < target 时,说明目标值在右,将左边界移动到mid + 1 的位置同理将右边界移动到mid - 1的位置class Solution { public int search(int[] nums, int target) { int l = 0; int r = nums.length - 1; while(l <= r){ int原创 2022-03-02 10:14:49 · 54 阅读 · 0 评论