2025.11.17 力扣每日一题

1437.是否所有1都至少相隔k个元素

cpp 复制代码
class Solution {
public:
    bool kLengthApart(vector<int>& nums, int k) {
        // cnt:记录当前位置与上一个1之间的"间隔元素数"
        // 初始化为k:处理第一个1的情况(第一个1前面没有元素,默认满足间隔要求)
        int cnt = k;
        
        // 遍历数组的每个元素
        for (int num : nums) {
            if (num == 0) {
                // 当前是0,间隔数+1
                cnt++;
                continue; // 跳过后续逻辑,继续下一个元素
            }
            
            // 当前是1:检查与上一个1的间隔是否≥k
            if (cnt < k) {
                return false; // 间隔不足,直接返回false
            }
            
            // 重置间隔数:当前1是新的"上一个1",后续元素从0开始计数间隔
            cnt = 0;
        }
        
        // 遍历完所有元素,所有1的间隔都满足要求
        return true;
    }
};

为什么初始化为 k?

假设 cnt 初始化为 0,会出现什么问题?

当第一个元素是 1 时,代码会检查 cnt < k(即 0 < k)。如果 k ≥ 1,会直接返回 false,这显然错误(第一个 1 不需要间隔)。

而初始化为 k 时:

当第一个元素是 1 时,代码检查 cnt < k(即 k < k),结果为 false,不会误判,而是正常重置 cnt=0,开始统计与下一个 1 的间隔。

即使 k=0(允许 1 相邻),初始化为 0 也满足 cnt >= 0,逻辑依然正确。

相关推荐
旖-旎29 分钟前
LeetCode 518:零钱兑换||(完全背包)—— 题解
c++·算法·leetcode·动态规划·背包问题
To_OC1 小时前
LC 42 接雨水:暴力超时卡半天?前后缀数组一用就通了
javascript·算法·leetcode
delishcomcn2 小时前
AI视觉识别+分切算法:电化铝缺陷检测与裁切一体化解锁
人工智能·算法
触底反弹2 小时前
深入理解大模型采样:Temperature、Top-K、Top-P 的原理与实战
人工智能·算法·面试
雪碧聊技术2 小时前
力扣 LCR 091. 粉刷房子 —— 动态规划入门详解
算法·动态规划
延凡科技5 小时前
多场景落地复盘:端边云架构无人机智能巡检系统设计与实践
大数据·数据结构·人工智能·科技·架构·无人机·能源
CV-Climber5 小时前
检索技术的实际应用
人工智能·算法
hhzz6 小时前
Tiger AI Platform平台中增加人脸识别功能
图像处理·人工智能·算法·计算机视觉·大模型
从零开始的代码生活_6 小时前
C++ 继承详解:访问控制、对象模型、菱形继承与设计取舍
开发语言·c++·后端·学习·算法