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
class Solution { public boolean kLengthApart(int[] nums, int k) { boolean res = false; List<Integer> list = new ArrayList(); for(int i = 0; i < nums.length; i++){ if(nums[i] == 1) list.add(i); } System.out.println(list.toString()); //if(list.size() == 0) return k==0; int st = Integer.MAX_VALUE; for(int i = 1; i < list.size(); i++){ st = Math.min(st, list.get(i) - list.get(i - 1)); if(st - 1 < k) return false; } return true; } }
求两1点间最小距离,注意如果没有1直接返回true
class Solution { public boolean kLengthApart(int[] nums, int k) { for(int start = -1, i = 0; i < nums.length; i++) if(nums[i] == 1) { if(start != -1 && i - start - 1 < k) return false; start = i; } return true; } }
或者这样O(N)