leetcode刷题937-2

leetcode刷题937-2
感想:开始做的时候,认为这道题挺简单的,我首先想到的方法是对数组使用二重循环进行比较就可以完成的,可是发现超时了。时间达到1860ms。看了其他人的想法,发现再进行比较先对数组进行排序,可以大大减小时间复杂度,再使用一个循环进行判断是否有相等的元素,最后的运行时间为6ms。我们做题目的目的不仅通过测试,而且要追求代码的质量

题目解析:
对给出的随机数组判断是否有相同的元素

做题逻辑:
1.循环遍历比较,使用双重循环,时间复杂度为(n^2)

2.先排序,再遍历比较,这里由于经过的排序,可以直接使用单重循环实现,这就有效的降低了时间复杂度(时间复杂度=排序算法的时间复杂度)

对比c语言和java:
用c语言的方法,排序方法的自己写
用java的话,Java本身自带数组排序方法
从这个方面看,java的编写是比c语言编写更简单

考查方向:数组,排序

代码:
c:时间超时
bool containsDuplicate(int* nums, int numsSize) {
    int i,j;
    for(i=0;i<numsSize;i++){
        for(j=i;j<numsSize;j++){
            if(i!=j&&nums[i]==nums[j]){
               return true;
            }
        }
    }
    return false;
}
java:有效提升速度
class Solution {
    public boolean containsDuplicate(int[] nums) {
        Arrays.sort(nums);
        int i;
        for(i=0;i<nums.length-1;i++){
            if(nums[i]==nums[i+1]){
                return true;
            }
        }
        return false;
    }
}

猜你喜欢

转载自blog.csdn.net/dingkm666/article/details/84500839