力扣算法 1437题 是否所有1都至少相隔k个元素
力扣算法 1437题 是否所有1都至少相隔k个元素
题目:
给你一个由若干 0 和 1 组成的数组 nums 以及整数 k。如果所有 1 都至少相隔 k 个元素,则返回 true ;否则,返回 false 。
示例 1:

输入:nums = [1,0,0,0,1,0,0,1], k = 2
输出:true
解释:每个 1 都至少相隔 2 个元素。
示例 2:

输入:nums = [1,0,0,1,0,1], k = 2
输出:false
解释:第二个 1 和第三个 1 之间只隔了 1 个元素。
提示:
1 <= nums.length <= 1050 <= k <= nums.lengthnums[i]的值为0或1
解法1:标志法
解析:创建一个标志位,如果第一次碰到1,将其置为true,后面碰到0就临时temp变量+1,直到碰到下一个1
class Solution {
public boolean kLengthApart(int[] nums, int k) {
List<Integer> list = new ArrayList<>();
boolean temp1 = false;
int temp = 0;
for ( int i = 0 ; i < nums.length ; i++){
if (nums[i] == 1 && temp1 == false){
temp1 = true;
}else if (nums[i] == 1 && temp1 == true){
list.add(temp);
temp = 0;
}else if( nums[i] == 0 && temp1 == true){
temp +=1;
}
}
for (Integer i : list){
if(i < k){
return false;
}
}
return true;
}
}
解法2:直接遍历
解析:直接遍历数组,只需要记录0的个数是否比k小,如果是,直接false
class Solution {
public boolean kLengthApart(int[] nums, int k) {
int zeroCount = k;
for (int num: nums) {
if (num == 0) {
zeroCount++;
} else if (num == 1) {
if (zeroCount < k) {
return false;
}
zeroCount = 0;
}
}
return true;
}
}

浙公网安备 33010602011771号