LeetCode--初级算法--数组篇--第四题--存在重复元素


###GitHub地址


###题目:
给定一个整数数组,判断是否存在重复元素。
如果任何值在数组中出现至少两次,函数返回 true。如果数组中每个元素都不相同,则返回 false。
###示例:
示例 1:
输入: [1,2,3,1]
输出: true

示例 2:
输入: [1,2,3,4]
输出: false

示例 3:
输入: [1,1,1,3,3,4,3,2,4,2]
输出: true

###代码:
一开始我想到的是先将数组排序,排序之后判断前后两个元素是否相等,从而来判断有没有重复的元素,但是我自己写的快排显然不够快,哈哈,所以又是提交LeetCode时间太长,所以就写了下面比较low的方法,只干掉了21%的人。

public static boolean containsDuplicate(int[] nums) {
    for (int i =0 ; i < nums.length ; i++) {
        for (int j = i+1; j < nums.length ; j++) {
            if (nums[i] == nums[j]) {
                return true;
            }
        }
    }
}

public static void main(String[] args) {
    int[] nums = {1, 2, 3, 4, 5, 4, 3, 2, 4, 2};
    System.out.println(containsDuplicate(nums));
}

然后看到了别人写的代码中用到了Arrays工具类中提供的排序算法(sort),底层好像也是快排,具体我没有太看。下面是代码,这样就可以干掉97%左右的人了。

public static boolean containsDuplicate(int[] nums) {
	Arrays.sort(nums);
    for (int i = 1 ; i < nums.length ; i++) {
        if (nums[i - 1] == nums[i])
            return true;
    }
    return false;
}

最屌的方法是下面的方法,看看吧,反正我没有想到:)
(这个算法有问题,leetcode测试用例覆盖不够,评论区大佬看出来了。。。)

public static boolean containsDuplicate(int[] nums) {
   for (int i = 1; i < nums.length; i++) {
       for (int j = i - 1; j >= 0; j--) {
           if (nums[i] > nums[j]) {
               break;
           } else if (nums[i] == nums[j]) {
               return true;
           }
       }

   }
   return false;
}
if (nums[i] > nums[j]) {
    break;
} 

这部分的判断才是精髓的地方,通过这个判断,如果满足这个判断的数据都将大于之前的已经出现过得数。

你可能感兴趣的:(LeetCode,LeetCode)