1437. Check If All 1’s Are at Least Length K Places Away
Given an array nums
of 0s and 1s and an integer k
, return True
if all 1’s are at least k
places away from each other, otherwise return False
.
Example 1:
Input: nums = [1,0,0,0,1,0,0,1], k = 2 Output: true Explanation: Each of the 1s are at least 2 places away from each other.
Example 2:
Input: nums = [1,0,0,1,0,1], k = 2 Output: false Explanation: The second 1 and third 1 are only one apart from each other.
Example 3:
Input: nums = [1,1,1,1,1], k = 0 Output: true
Example 4:
Input: nums = [0,1,0,1], k = 1 Output: true
Constraints:
1 <= nums.length <= 10^5
0 <= k <= nums.length
nums[i]
is0
or1
给定一个0/1数组,问数组中所有1的间隔是否超过某个阈值。
简单题,一遍扫描数组,使用双指针记录相邻两个1,并实时计算它们的距离,完整代码如下:
class Solution {
public:
bool kLengthApart(vector<int>& nums, int k) {
int n = nums.size();
int i = 0, j = 0;
while (i < n) {
while (i < n&&nums[i] == 0)++i;
if (i >= n - 1)break;
j = i + 1;
while (j < n&&nums[j] == 0)++j;
if (j - i - 1 < k)return false;
i = j;
}
return true;
}
};
本代码提交AC,用时140MS。