2025-08-19 学习日记

发布于 2025-08-19 12:00 708 字 4 min read 手写 每个字都是我自己敲的。

2025-12-24 学习日记2025-12-17 学习日记2025-12-14 学习日记2025-12-09 学习日记2025-12-08 学习日记2025-12-07 学习日记2025-12-06 学习日记2025-12-05 学习日记2025-12-04 学习日记2025-12-03 学习日记2025-12-02 学习日记2025-12-01 学习日记2025-11-30 学习日记2025-11-29 学习日记2025-11-28 学习日记2025-11-27 学习日记2025-11-26 学习日记2025-11-25 学习日记2025-11-24 学习日记2025-11-23 学习日记2025-11-22 学习日记2025-11-21 学习日记2025-11-20 学习日记2025-11-19 学习日记2025-11-18 学习日记2025-11-17 学习日记2025-11-16 学习日记2025-11-15 学习日记2025-11-14 学习日记2025-11-13 学习日记2025-11-12 学习日记2025-11-11 学习日记2025-11-10 学习日记2025-11-09 学习日记2025-11-08 学习日记2025-11-07 学习日记2025-11-06 学习日记2025-11-05 学习日记2025-11-04 学习日记2025-11-03 学习日记2025-11-02 学习日记2025-11-01 学习日记2025-10-31 学习日记2025-10-30 学习日记2025-10-29 学习日记2025-10-28 学习日记2025-10-27 学习日记2025-10-26 学习日记2025-10-25 学习日记2025-10-24 学习日记2025-10-23 学习日记2025-10-22 学习日记2025-10-21 学习日记2025-10-20 学习日记2025-10-19 学习日记2025-10-18 学习日记2025-10-17 学习日记2025-10-16 学习日记2025-10-15 学习日记2025-10-14 学习日记2025-10-13 学习日记2025-10-11 学习日记2025-10-10 学习日记2025-10-09 学习日记2025-10-03 学习日记2025-10-02 学习日记2025-10-01 学习日记2025-09-30 学习日记2025-09-29 学习日记2025-09-28 学习日记2025-09-27 学习日记2025-09-26 学习日记2025-09-25 学习日记2025-09-24 学习日记2025-09-23 学习日记2025-09-22 学习日记2025-09-21 学习日记2025-09-20 学习日记2025-09-18 学习日记2025-09-17 学习日记2025-09-16 学习日记2025-09-15 学习日记2025-09-14 学习日记2025-09-13 学习日记2025-09-12 学习日记2025-09-11 学习日记2025-09-10 学习日记2025-09-09 学习日记2025-09-08 学习日记2025-09-04 学习日记2025-09-03 学习日记2025-09-02 学习日记2025-09-01 学习日记2025-08-31 学习日记2025-08-29 学习日记2025-08-28 学习日记2025-08-27 学习日记2025-08-26 学习日记2025-08-25 学习日记2025-08-24 周记2025-08-23 学习日记2025-08-22 学习日记2025-08-21 学习日记2025-08-20 学习日记2025-08-19 学习日记2025-08-18 学习日记2025-08-17 周记2025-08-16 学习日记2025-08-15 学习日记2025-08-14 学习日记2025-08-13 学习日记2025-08-12 学习日记2025-08-11 学习日记
今日学习记录 1. 全 0 子数组的数目leetcode.2348 关键词: 问题分析: 给你一个整数数组 nums ,返回全部为  的 子数组 数目。 核心思路 先看一个范围内连续的 0 数组个数,能组成的不同数组数为$\ n*(n+1)/2$,很好推都数学公式 用双指针求 0 的范围个数和统计范围内的 0 个数 定义 fast 和 low,遍历数组,当遍历到 0,再让 fast...

今日学习记录

1. 全 0 子数组的数目leetcode.2348

关键词:双指针 数学 问题分析:

  1. 给你一个整数数组 nums ,返回全部为 0 的 子数组 数目。

核心思路

  1. 先看一个范围内连续的 0 数组个数,能组成的不同数组数为 n∗(n+1)/2\ n*(n+1)/2,很好推都数学公式
  2. 用双指针求 0 的范围个数和统计范围内的 0 个数
    • 定义 fast 和 low,遍历数组,当遍历到 0,再让 fast 往后遍历有多少个 0,统计 0 的个数累加
    • 每次合并两指针,时间复杂度为 1,无额外空间开销
  3. 还可以滑窗,但没我上面直接计算快,就不用了;
  4. 还有增量法,都是基于双指针的,也没我上面的快

**最终代码:

long long zeroFilledSubarray(vector<int>& nums) {

        long long ans = 0;

        int n = 0;

        for(int fast = 0,low = 0;fast<nums.size();fast++){

            if(nums[fast]==0){

                low = fast;

                while(fast+1<nums.size()&&!nums[fast+1]) fast++;

                n = fast-low+1;

                ans += (long long)n*(n+1)/2;

            }

        }

        return ans;

    }

学到的点:

  1. 简单到爆
  2. 越小越合法的滑动窗口
  3. 增量法

2. 等差数列划分leetcode.413

关键词:双指针 问题分析:

  1. 给你一个整数数组 nums,返回数组 nums 中所有为等差数组的子数组个数.
  2. 这个数列至少有三个元素

核心思路

  1. 还是双指针,但是怎么换差分我就不熟了呢,不就是要找到第一个符合条件的点,再往后面找符合该条件的连续区间,然后统计区间长度,在做计算
  2. 就是 i 站桩,j 往后找,while 增加 j,取 j 中间的数量,不用额外变量来计数,不准确,直接 j-i+1,再在后面减 3 进行计算,方便不易错,最后合并 i 和 j,i 都不用 i++了

最终代码:

int numberOfArithmeticSlices(vector<int>& nums) {

        int n = nums.size();

        if(n<3) return 0;

        int ans = 0;

        int len = 0,an = 0;

        int count = 0;

        for(int i = 0;i<n-2;){

            int j = i,d = nums[i+1] - nums[i];

            while(j+1<n&&nums[j+1]-nums[j]==d) j++;

            len = j-i+1,an = len - 3+1;

            count = (1+an)*an/2;

            ans += count;

            i = j;

        }

        return ans;

    }

学到的点:

  1. 双指针

今日收获

  1. 新技巧:

    • 双指针
  2. 待加强:

    • 差分数组,前缀和
  3. 明日计划:

    • [ ]
    • [ ]

执笔 手写

随机文章

加载中...