演算法 leetcode每日刷題筆記(兩數和問題)

2021-10-06 06:21:14 字數 896 閱讀 4443

示例:給定 nums = [2, 7, 11, 15], target = 9

因為 nums[0] + nums[1] = 2 + 7 = 9

所以返回 [0, 1]`

一、暴力法很簡單,遍歷每個元素 a,並查詢是否存在乙個值與target−a 相等的目標元素。

class

solution;}

}}throw

newillegalargumentexception

("no two sum solution");

}}

這樣寫提交沒有問題但會耗費大量的時間運算。由於需要遍歷兩次所以時間複雜度是o(n²),空間複雜度較小為:o(1)。

二、題目需要查詢索引,然而保持陣列中的每個元素與其索引相互對應的最好方法是什麼?雜湊表!我們自然就想到雙列的map集合,這裡我們自然用的hashmap集合。

我們可以在進行迭代並將元素插入到表中的同時,我們還會回過頭來檢查表中是否已經存在當前元素所對應的目標元素。如果它存在,那我們已經找到了對應解,並立即將其返回。

這樣我們就可以節省運算時間,一邊給表裡插值,一邊檢查,這樣我們就不需要兩次遍歷。

class

solution;}

map.

put(nums[i]

,i);

}throw

newillegalargumentexception

("no two sum solution");

}}

以空間換取速度的方式,我們可以將查詢時間從 o(n) 降低到 o(1)。這樣他的時間複雜度就為o(n)×o(1)=o(n)。相對而言因為儲存了n次所以它的空間複雜度:o(n)。

leetcode每日刷題

題目描述 有效括號字串為空 a 或 a b,其中 a 和 b 都是有效的括號字串,代表字串的連線。例如,和 都是有效的括號字串。如果有效字串 s 非空,且不存在將其拆分為 s a b 的方法,我們稱其為原語 primitive 其中 a 和 b 都是非空有效括號字串。給出乙個非空有效字串 s,考慮將...

每日程式設計(五) leetcode刷題

題目 最後乙個單詞的長度 描述 給定乙個僅包含大小寫字母和空格 的字串,返回其最後乙個單詞的長度。如果不存在最後乙個單詞,請返回 0 說明 乙個單詞是指由字母組成,但不包含任何空格的字串。示例 輸入 hello world 輸出 5分析 比較簡單了,很明顯字串的分割,去最後乙個字串,計算長度即可,但...

每日程式設計(十) leetcode刷題

題目 將有序陣列轉換為二叉搜尋樹 題目描述 將乙個按照公升序排列的有序陣列,轉換為一棵高度平衡二叉搜尋樹。本題中,乙個高度平衡二叉樹是指乙個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過 1。示例 給定有序陣列 10,3,0,5,9 乙個可能的答案是 0,3,9,10,null,5 它可以表示...