力扣爆刷第135天之数组五连刷(双指针快慢指针滑动窗口)

力扣爆刷第135天之数组五连刷(双指针快慢指针滑动窗口)

一、704. 二分查找

题目链接:https://leetcode.cn/problems/binary-search/description/
思路:经典二分查找算法,每次与中值比较,中值大于target右边界左移,中值小于target左边界右移。

class Solution {
    public int search(int[] nums, int target) {
        int left = 0, right = nums.length - 1;
        while(left <= right) {
            int mid = left + (right - left) / 2;
            if(nums[mid] == target) {
                return mid;
            }else if(nums[mid] > target) {
                right = mid - 1;
            }else{
                left = mid + 1;
            }
        }
        return -1;
    }
}

二、27. 移除元素

题目链接:https://leetcode.cn/problems/remove-element/description/
思路:移出相同元素,经典快慢指针,元素不等慢指针才走。

class Solution {
    public int removeElement(int[] nums, int val) {
        int slow = 0;
        for(int i = 0; i < nums.length; i++) {
            if(nums[i] != val) {
                nums[slow++] = nums[i];
            }
        }
        return slow;
    }
    
}

三、977. 有序数组的平方

题目链接:https://leetcode.cn/problems/squares-of-a-sorted-array/description/
思路:画了一个非常清晰易懂的图,对含有负数的有序数组进行平方之后的排序,其实平方后就是第二个图形,只需要双指针从两端进行归并排序即可。
在这里插入图片描述

class Solution {
    public int[] sortedSquares(int[] nums) {
        int len = nums.length, left = 0, right = len-1;
        int[] result = new int[len];
        for(int i = 0; i < len; i++) {
            nums[i] *= nums[i]; 
        }
        int k = right;
        while(left <= right) {
            if(nums[left] > nums[right]) {
                result[k--] = nums[left++];
            }else{
                result[k--] = nums[right--];
            }
        }
        return result;
    }
}

四、209. 长度最小的子数组

题目链接:https://leetcode.cn/problems/minimum-size-subarray-sum/description/
思路:求满足目标和的最短长度子数组,这种题目一看就是滑动窗口,使用快慢指针,快指针扩大窗口,慢指针缩小窗口。

class Solution {
    public int minSubArrayLen(int target, int[] nums) {
        int len = nums.length, min = len+1, sum = 0, slow = 0, fast = 0;
        while(fast < len) {
            sum += nums[fast++];
            while(sum >= target) {
                min = Math.min(min, fast - slow);
                sum -= nums[slow++];
            }
        }
        return min == len+1 ? 0 : min; 
    }
}

五、59. 螺旋矩阵 II

题目链接:https://leetcode.cn/problems/spiral-matrix-ii/description/
思路:螺旋矩阵非常经典的题目,分别控制四个边界即可。

class Solution {
    public int[][] generateMatrix(int n) {
        int[][] nums = new int[n][n];
        int k = 1, sum = n * n;
        int left = 0, right = n, up = 0, down = n;
        while(k <= sum) {
            if(up < down) {
                for(int i = left; i < right; i++) {
                    nums[up][i] = k++;
                }
                up++;
            }

            if(left < right) {
                for(int i = up; i < down; i++) {
                    nums[i][right-1] = k++;
                }
                right--;
            }

            if(up < down) {
                for(int i = right-1; i >= left; i--) {
                    nums[down-1][i] = k++;
                }
                down--;
            }

            if(left < right) {
                for(int i = down-1; i >= up; i--) {
                    nums[i][left] = k++;
                }
                left++;
            }
        }
        return nums;
    }
}

相关推荐

  1. 90hot10036-40

    2024-05-10 08:14:06       44 阅读
  2. 91hot10041-45

    2024-05-10 08:14:06       46 阅读
  3. 89hot10031-35

    2024-05-10 08:14:06       42 阅读
  4. 92hot10046-50

    2024-05-10 08:14:06       42 阅读
  5. 94hot10056-60

    2024-05-10 08:14:06       43 阅读
  6. 95hot10061-65

    2024-05-10 08:14:06       40 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-10 08:14:06       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-10 08:14:06       101 阅读
  3. 在Django里面运行非项目文件

    2024-05-10 08:14:06       82 阅读
  4. Python语言-面向对象

    2024-05-10 08:14:06       91 阅读

热门阅读

  1. apk合包,apk合并。附免费合并工具

    2024-05-10 08:14:06       36 阅读
  2. 数据分析层的功能特点和应用

    2024-05-10 08:14:06       28 阅读
  3. Kubernetes(K8s)简介

    2024-05-10 08:14:06       29 阅读
  4. SSD (Pytorch)复现 Ubuntu20.04

    2024-05-10 08:14:06       32 阅读
  5. 解决Rust Cargo报错

    2024-05-10 08:14:06       29 阅读
  6. Php swoole和mqtt

    2024-05-10 08:14:06       31 阅读
  7. android 安全机制 和权限管理 的一点研究

    2024-05-10 08:14:06       31 阅读
  8. 快速掌握并使用Apache POI

    2024-05-10 08:14:06       28 阅读
  9. Rust - TCP Server

    2024-05-10 08:14:06       30 阅读