给你一个由若干 0 和 1 组成的数组 nums 以及整数 k。如果所有 1 都至少相隔 k 个元素,则返回 true ;否则,返回 false 。
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
bool kLengthApart(vector<int>& nums, int k) {
int n=nums.size();
int index=-1;
//遍历数组找到第一个1的位置
for(int i=0;i<n;i++){
if(nums[i]==1){
index=i;
break;
}
}
//如果数组中没有1,直接返回true
if(index==-1){
return true;
}
//慢指针指向第一个1
int slow=index;
//快指针指向下一个数
int fast=index+1;
//两个指针的间隔
int distance=0;
//快指针没越界就一直遍历
while(fast<n){
//如果快指针找到1
if(nums[slow]==nums[fast]){
//如果间隔小于k
if(distance<k){
//直接返回false
return false;
}
//如果间隔大于等于k
//慢指针指向快指针的1
slow=fast;
//间隔重置
distance=0;
//快指针向前移一位
fast++;
//开始下一次循环
continue;
}
//如果快指针没指向1
//间隔++
//快指针向后移一位
distance++;
fast++;
}
return true;
}
};
834

被折叠的 条评论
为什么被折叠?



