快速冒泡排序与map的containsKey方法之时间复杂度
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
快速冒泡排序与map的containsKey⽅法之时间复杂度
【例题】给定⼀个整数数组nums 和⼀个⽬标值 target,请在该数组中找出和为⽬标值的那两个整数,并返回他们的数组下标。
*可以假设每种输⼊只会对应⼀个答案。
但是,数组中同⼀个元素不能使⽤两遍。
看到题的第⼀眼想到的便是暴⼒解法,代码如下:
public static Object[] test1(int[] nums,int num){
long t1 = System.currentTimeMillis();
for(int i = 0; i < nums.length; i++){
for(int j = i+1; j < nums.length; j++){
if(nums[j] + nums[i] == num){
long t2 = System.currentTimeMillis();
long t3 = t2 - t1;
//返回两个数组下标及所⽤时间
return new Object[]{i,j,t3};
}
}
}
long t2 = System.currentTimeMillis();
return new Object[]{"No sulution",t2-t1};
}
时间复杂度为O(n^2),空间复杂度为O(1)。
当数据量⼩于⼀万时,运⾏没有任何卡顿,但当处理⼤数据量时,速度明显变慢,于是就采⽤hashmap的⽅式⽐较了⼀下: public static Object[] test2(int[] nums, int num) {
//时间戳
long t1 = System.currentTimeMillis();
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
int tmp = num - nums[i];
//判断map中是否包含键名tmp
if (map.containsKey(tmp)) {
long t2 = System.currentTimeMillis();
//返回两个数组下标及所⽤时间
return new Object[] { i, map.get(tmp), t2-t1 };
}
map.put(nums[i], i);
}
long t2 = System.currentTimeMillis();
return new Object[]{"No sulution",t2-t1};
}
时间复杂度为O(n),空间复杂度为O(n)。
数量⼩时,暴⼒解法与hashmap⽅式效率差不多,但当处理⼤数据时,使⽤containsKey⽅法会⼤⼤降低消耗。