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;
}
}