跳至主要內容

hot100-04-子串

holic-x...大约 2 分钟算法算法

难度说明:🟢简单🟡中等🔴困难

hot100-04-子串

🟡01-和为K的子数组(560)

1.题目内容

​ 给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数

子数组是数组中元素的连续非空序列

2.题解思路

👻方法1:双层循环(暴力求解)

​ 子数组是数组中元素的连续非空序列,因此此处目的是为了确认这个序列的起点和终点,可通过双层循环遍历实现

​ 外层循环敲定起点i,内层循环敲定终点j,在这个内层遍历过程中可通过累加的方式来得到当前这个子数组的总和,将其与k进行比较,满足则res计数+1

public class Solution1 {

    public int subarraySum(int[] nums, int k) {
        // 定义结果
        int res = 0;

        // 暴力遍历
        for(int i=0;i<nums.length;i++){ // 外层循环确定子数组起点
            int currentCount = 0;
            // 内层遍历是为了找到对应的值(此处j指针起点是i(表示可以是其本身))
            for(int j=i;j<nums.length;j++){ // 内层循环确定子数组终点
                currentCount += nums[j];
                if(currentCount == k){
                    res ++;
                }
            }
        }
        // 返回结果
        return res;
    }
}

复杂度分析

  • 时间复杂度:
  • 空间复杂度:

3.复盘

🔴02-滑动窗口最大值(239)

1.题目内容

给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。

返回 滑动窗口中的最大值

2.题解思路

❌方法1:双层循环(暴力求解) 超时

核心:循环遍历每个数组元素,然后敲定以该元素为起点的滑动窗口的最大值

​ 即循环遍历数组元素i,然后敲定(i,i+k)这个滑动窗口的最大值,分别存入数组

public class Solution1 {

    // 暴力法:依次滑动窗口,计算窗口内元素之和
    public int[] maxSlidingWindow(int[] nums, int k) {
        // 定义滑动窗口最大值
        int[] max = new int[nums.length - k + 1];

        for (int i = 0; i < nums.length - k + 1; i++) {
            max[i] = Integer.MIN_VALUE;
            // 依次遍历,更新当前滑动窗口最大值
            for (int j = i; j < i + k; j++) {
                max[i] = Math.max(max[i], nums[j]);
            }
        }

        return max;
    }

}

👻方法2:xxx(todo)

评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v3.1.3