当前位置:   article > 正文

代码随想录day2 Java版_java八股代码随想录

java八股代码随想录

1.有序数组的平方

因为数组本身有序,因此最大值只出现在两端,想到左右指针 

  1. class Solution {
  2. public int[] sortedSquares(int[] nums) {
  3. int [] res = new int[nums.length];
  4. int i = 0, j = nums.length-1, k = nums.length-1;
  5. while (i <= j) {
  6. if (nums[i] * nums[i] >= nums[j] * nums[j]) {
  7. res[k--] = nums[i] * nums[i];
  8. i++;
  9. } else {
  10. res[k--] = nums[j] * nums[j];
  11. j--;
  12. }
  13. }
  14. return res;
  15. }
  16. }

2.长度最小的子数组

使用滑动窗口思想优化,用双指针实现

  1. class Solution {
  2. public int minSubArrayLen(int target, int[] nums) {
  3. int[] sum = new int[nums.length+1];
  4. for(int i = 1; i <= nums.length; i++) {
  5. sum[i] = sum[i-1] + nums[i-1];
  6. }
  7. int res = 1000000;
  8. int i = 0;
  9. for(int j = 1; j <= nums.length; j++) {
  10. while(sum[j]-sum[i] >= target && i <= j) {
  11. res = res < j-i?res:j-i ;
  12. i++;
  13. }
  14. }
  15. if (res == 1000000) return 0;
  16. return res;
  17. }
  18. }

3.螺旋数组

就是纯模拟,按照题目描述顺时针遍历

  1. class Solution {
  2. public int[][] generateMatrix(int n) {
  3. int[][] nums = new int[n][n];
  4. int offset = 1,count = 1, sx = 0, sy = 0;
  5. int loop = n / 2;
  6. while (loop-- > 0){
  7. int i = sy, j = sx;
  8. for (; j < n-offset; j++) {
  9. nums[sx][j] = count++;
  10. }
  11. for (; i < n-offset; i++) {
  12. nums[i][j] = count++;
  13. }
  14. for (; j > sx; j--) {
  15. nums[i][j] = count++;
  16. }
  17. for (; i > sy; i--) {
  18. nums[i][j] = count++;
  19. }
  20. offset++;
  21. sx++;
  22. sy++;
  23. }
  24. if (n % 2 == 1) {
  25. nums[n/2][n/2] = count;
  26. }
  27. return nums;
  28. }
  29. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/752969
推荐阅读
相关标签
  

闽ICP备14008679号