The main idea is to track the position of the last seen 1. For each new 1, check if the distance from the previous 1 is at least k. If not, return false. This works because the only way to violate the rule is to have two 1’s too close together.
classSolution {
public:bool kLengthApart(vector<int>& nums, int k) {
int last =-k-1;
for (int i =0; i < nums.size(); ++i) {
if (nums[i] ==1) {
if (i - last <= k) return false;
last = i;
}
}
return true;
}
};
1
2
3
4
5
6
7
8
9
10
11
12
funckLengthApart(nums []int, kint) bool {
last:=-k-1fori, v:=rangenums {
ifv==1 {
ifi-last<=k {
returnfalse }
last = i }
}
returntrue}
1
2
3
4
5
6
7
8
9
10
11
12
classSolution {
publicbooleankLengthApart(int[] nums, int k) {
int last =-k-1;
for (int i = 0; i < nums.length; ++i) {
if (nums[i]== 1) {
if (i - last <= k) returnfalse;
last = i;
}
}
returntrue;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
classSolution {
funkLengthApart(nums: IntArray, k: Int): Boolean {
var last = -k-1for (i in nums.indices) {
if (nums[i] ==1) {
if (i - last <= k) returnfalse last = i
}
}
returntrue }
}
1
2
3
4
5
6
7
8
defkLengthApart(nums: list[int], k: int) -> bool:
last: int =-k-1for i, v in enumerate(nums):
if v ==1:
if i - last <= k:
returnFalse last = i
returnTrue
1
2
3
4
5
6
7
8
9
10
11
12
13
14
impl Solution {
pubfnk_length_apart(nums: Vec<i32>, k: i32) -> bool {
letmut last =-k -1;
for (i, &v) in nums.iter().enumerate() {
if v ==1 {
if (i asi32) - last <= k {
returnfalse;
}
last = i asi32;
}
}
true }
}