日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode(#1)————Two Sum

發布時間:2025/3/12 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode(#1)————Two Sum 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

問題描述

給定一個整數數組 nums?和一個目標值 target,請你在該數組中找出和為目標值的那?兩個?整數,并返回他們的數組下標

你可以假設每種輸入只會對應一個答案。但是,你不能重復利用這個數組中同樣的元素。

Given nums = [2, 7, 11, 15], target = 9, Because nums[0] + nums[1] = 2 + 7 = 9, return [0, 1].

Solution:

public static int[] twoSum(int[] nums, int target) {Map<Integer, Integer> map = new HashMap<>();// 建立值與下標對應關系for(int i = 0; i<nums.length; i++){map.put(nums[i], i);}// 獲取鍵集合int[] arr = new int[2];for(int i = 0; i < nums.length; i++){int complement = target - nums[i];if(map.containsKey(complement) && map.get(complement) != i){arr[0] = i;arr[1] = map.get(complement);}}return arr;}

對于輸入為[ 3, 3 ],target = 6 的測試case,我們要如何理解?

首先,在Map 中,相同的key 如果存在,那么舊的key 對應的 值就會被覆蓋掉,第一個 for 循環結束后,map 中只有一個鍵值對,即:{ 3 = 1 },這并不會影響結果,只不過在 arr[0] 賦值的時候,需要注意,一定不要使用 arr[0] = map.get(nums[i]); 這種寫法,看似與上面的正確解法語義上相同,但是卻忽視了相同元素被覆蓋掉的情況。

總結

上段代碼引用了LeetCode上此問題支持率最高的解決方法。

看到題目的時候我是正常的用了二重for循環進行求解的,在LeetCode中也有我那種解法,他們稱之為:Brute Force。

而上面貼出來的這種解法思路在于考慮到了時間復雜度。這里又不得不記錄一下我收集到了對時間復雜度的理解:

基本操作執行次數與問題規模n成正比。

時間復雜度 共有八個同數量級分別是:1,log2n,n,n log2n,n^2,n^3,2^n,n! ?

從 1 到 n! 時間復雜度依次增高。二重for循環記作O(n^2),三重for循環記作O(n^3)依此類推。

解釋是這樣的:To improve our run time complexity, we need a more efficient way to check if the complement exists in the array. If the complement exists, we need to look up its index. What is the best way to maintain a mapping of each element in the array to its index? A hash table.

為了改進我們運行時間的復雜程度,我們需要更有效的方法去array中檢查是否有一個特定的“補足數”存在,如果存在,我們就去找他的index。那么維護數組元素與其下標之間的映射關系最好的途徑是什么呢?沒錯,就是 hash 表。

這句話給我的印象特別深。那么如果下一次又出現一個問題要求我們找到兩組值的對應關系的話,我們首先就會考慮到哈希表。這正是我希望得到的東西,一種思考的方向。

We reduce the look up time from O(n) to O(1) by trading space for speed. A hash table is built exactly for this purpose, it supports fast look up in near constant time. I say "near" because if a collision occurred, a look up could degenerate to O(n) time. But look up in hash table should be amortized O(1) time as long as the hash function was chosen carefully.

我們通過犧牲空間換取速度的方式來將時間復雜度從O(n)到O(1)。哈希表的建立正是為此目的,它支持在近乎不變的時間內快速查找。

?

?

總結

以上是生活随笔為你收集整理的LeetCode(#1)————Two Sum的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。