快速/冒泡排序與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方法會大大降低消耗。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM