class Solution {
public:
bool isConsecutive(vector<int>& nums) {
}
};
2229. 检查数组是否连贯
给你一个整数数组 nums
,如果 nums
是一个 连贯数组 ,则返回 true
,否则返回 false
。
如果数组包含 [x, x + n - 1]
范围内的所有数字(包括 x
和 x + n - 1
),则该数组为连贯数组;其中 x
是数组中最小的数,n
是数组的长度。
示例 1:
输入:nums = [1,3,4,2] 输出:true 解释: 最小值是 1 ,数组长度为 4 。 范围 [x, x + n - 1] 中的所有值都出现在 nums 中:[1, 1 + 4 - 1] = [1, 4] = (1, 2, 3, 4) 。 因此,nums 是一个连贯数组。
示例 2:
输入:nums = [1,3] 输出:false 解释: 最小值是 1 ,数组长度为 2 。 范围 [x, x + n - 1] 中的所有值没有都出现在 nums 中:[1, 1 + 2 - 1] = [1, 2] = (1, 2) 。 因此,nums 不是一个连贯数组。
示例 3:
输入:nums = [3,5,4] 输出:true 解释: 最小值是 3 ,数组长度为 3 。 范围 [x, x + n - 1] 中的所有值都出现在 nums 中:[3, 3 + 3 - 1] = [3, 5] = (3,4,5) 。 因此,nums 是一个连贯数组。
提示:
1 <= nums.length <= 105
0 <= nums[i] <= 105
原站题解
java 解法, 执行用时: 15 ms, 内存消耗: 56.9 MB, 提交时间: 2023-10-15 18:12:53
class Solution { public boolean isConsecutive(int[] nums) { int min=nums[0]; int max=nums[0]; Set<Integer>set=new HashSet<>(); for(int num:nums){ if(set.contains(num)){ return false; } set.add(num); if(min>num){ min=num; } if(max<num){ max=num; } } return (max-min+1)==nums.length; } }
python3 解法, 执行用时: 60 ms, 内存消耗: 31.2 MB, 提交时间: 2023-10-15 18:12:13
class Solution: def isConsecutive(self, nums: List[int]) -> bool: return max(nums) - min(nums) + 1 == len(nums) and len(set(nums)) == len(nums)
golang 解法, 执行用时: 124 ms, 内存消耗: 8.1 MB, 提交时间: 2023-10-15 18:11:52
func isConsecutive(nums []int) bool { sort.Ints(nums) for i := 1; i < len(nums); i++ { if nums[i] != nums[i-1]+1 { return false } } return true } func isConsecutive2(nums []int) bool { min := nums[0] for i := 0; i < len(nums); i++ { if nums[i] < min { min = nums[i] } } for i := 0; i < len(nums); i++ { for nums[i]-min != i { if nums[i]-min >= len(nums) || nums[i] == nums[nums[i]-min]{ return false } nums[i],nums[nums[i]-min] = nums[nums[i]-min],nums[i] } } return true }