代码随想录算法训练营第二天

编程入门 行业动态 更新时间:2024-10-11 19:16:13

代码随想录算法训练营<a href=https://www.elefans.com/category/jswz/34/1769066.html style=第二天"/>

代码随想录算法训练营第二天

数组相关

977. 有序数组的平方

参考文章
题目连接

思路

  1. 暴力法:先将数组进行平方运算,然后排序
  2. 使用双指针:因为题目提供的数组为递增数组所以分为无负数(直接进行平方计算求解)和有负数两种,但不管那种平方后最大的必然出现在数组头或者数组尾,所以通过头尾双指针比较大小然后逆序插入新数组的方式进行解题。

个人题解

1 暴力法
class Solution {public int[] sortedSquares(int[] nums) {int l = 0;int r = nums.length-1;for (int i = 0; i < nums.length; i++) {nums[i] = nums[i] * nums[i];}quickSort(nums, 0, r);return nums;}private void quickSort(int[] nums, int strat, int end) {if (strat > end) {return;}int midIndex = pointSwap(nums, strat, end);quickSort(nums, strat, midIndex - 1);quickSort(nums, midIndex + 1, end);}private int pointSwap(int[] nums, int start, int end) {int pivot = nums[start];int leftPoint = start;int rightPoint = end;while (leftPoint < rightPoint) {while (leftPoint < rightPoint&& nums[rightPoint] > pivot) {rightPoint--;}while (leftPoint < rightPoint&& nums[leftPoint] <= pivot) {leftPoint++;}if (leftPoint < rightPoint) {int temp = nums[leftPoint];nums[leftPoint] = nums[rightPoint];nums[rightPoint] = temp;}}nums[start] = nums[rightPoint];nums[rightPoint] = pivot;return rightPoint;}
}
2 双指针
class Solution {public int[] sortedSquares(int[] nums) {int n = nums.length - 1;int l = 0;int r = n;int[] res = new int[nums.length];while (l <= r) {if (Math.abs(nums[l]) > Math.abs(nums[r])) {res[n] = nums[l] * nums[l];l++;} else {res[n] = nums[r] * nums[r];r--;}n--;}return res;}
}

209. 长度最小的子数组

参考文章
题目连接

思路

通过滑动窗口减小双循环的时间复杂度

个人题解

滑动窗口
class Solution {public int minSubArrayLen(int target, int[] nums) {int size = Integer.MAX_VALUE;int total = 0;int start = 0, end = 0;for (int i = 0; i < nums.length; i++) {total += nums[i];while (total >= target) {size = Math.min(size, end - start + 1);total -= nums[start];start++;}end++;}return Integer.MAX_VALUE == size ? 0 : size;}
}

59.螺旋矩阵II

参考文章
题目连接

思路

通过控制上(s)下(x)左(z)右(y)边界来遍历螺旋数组

个人题解

class Solution {public int[][] generateMatrix(int n) {int s = 0, x = n - 1, z = 0, y = n - 1;int[][] res = new int[n][n];int cur = 1;int num = n * n;while (cur <= num) {for (int i = z; i <= y; i++) {res[s][i] = cur++;}s++;for (int i = s; i <= x; i++) {res[i][y] = cur++;}y--;for (int i = y; i >= z; i--) {res[x][i] = cur++;}x--;for (int i = x; i >= s; i--) {res[i][z] = cur++;}z++;}return res;}
}

更多推荐

代码随想录算法训练营第二天

本文发布于:2024-02-06 02:40:29,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1745816.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:第二天   算法   训练营   代码   随想录

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!