给定一个整数数组,判断是否存在重复元素。
如果任意一值在数组中出现至少两次,函数返回 true
。如果数组中每个元素都不相同,则返回 false
。
最简洁的代码: set函数去重
class Solution: def containsDuplicate(self, nums: List[int]) -> bool: return len(nums) != len(set(nums))
java 一行:
public boolean containsDuplicate(int[] nums) { return Arrays.stream(nums).distinct().count() < nums.length; }
时空复杂度都很高
脑洞绝活类:
“随机算法,掷10万次2个骰子,万一发现有一次一样的就有,10万次都不一样就当做不存在重复吧,特殊案例再处理一下。”
bool containsDuplicate(int* nums, int numsSize){ int i; int a,b; srand(time(0)); if(0 == numsSize||1 == numsSize ){ return false; } for(i=0; i<100000; i++){ a = rand()%numsSize; b = rand()%numsSize; if(a!=b && (nums[a] == nums[b])){ return true; } } return 9999 == nums[numsSize-1]; }
java自带去重
class Solution { public boolean containsDuplicate(int[] nums) { Set<Integer> res = new HashSet<Integer>(); for(int i:nums) res.add(i); return res.size()<nums.length; } }
java正常解法:
class Solution { public boolean containsDuplicate(int[] nums) { Arrays.sort(nums); int n = nums.length; for (int i = 0; i < n - 1; i++) { if (nums[i] == nums[i + 1]) { return true; } } return false; } }