一:题目描述
给定一个整数数组,判断是否存在重复元素。
如果存在一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。
二:解决办法
1:两层for循环,暴力解法
public class Solution { public bool ContainsDuplicate(int[] nums) { for (int i = 0; i < nums.Length; i++) { int number = nums[i]; for (int j = i+1; j < nums.Length; j++) { if (number == nums[j]) { return true; } } } return false; } }
第一层循环将数找出来,第二次进行比较,时间复杂度为n*n。
2:HashTable,不能有同一键值数据
public class Solution { public bool ContainsDuplicate(int[] nums) { Hashtable hashtable = new Hashtable(); for (int i = 0; i < nums.Length; i++) { try { hashtable.Add(nums[i], i); } catch (Exception) { return true; } } return false; } }
使用了一层循环,效率变高。
3:List集合
public class Solution { public bool ContainsDuplicate(int[] nums) { ArrayList arrayList = new ArrayList(); for (int i = 0; i < nums.Length; i++) { if ( arrayList.Count == 0) { arrayList.Add(nums[0]); } if (!arrayList.Contains(nums[i]) ) { arrayList.Add(nums[i]); } } if (arrayList.Count<nums.Length) { return true; } return false; } }
4:排序后将相邻两个比较
public bool ContainsDuplicate(int[] nums) { Array.Sort(nums); for (int i = 0; i < nums.Length-1; i++) { if (nums[i]==nums[i+1]) { return true; } } return false; }