1. 程式人生 > 其它 >【ostep】04 虛擬化 CPU - 程序排程策略

【ostep】04 虛擬化 CPU - 程序排程策略

技術標籤:leetCodeleetcode

題目說明:
給定一個整數陣列 nums 和一個整數目標值 target,請你在該陣列中找出 和為目標值 的那 兩個 整數,並返回它們的陣列下標。

你可以假設每種輸入只會對應一個答案。但是,陣列中同一個元素不能使用兩遍。
你可以按任意順序返回答案。

  1. Solution 1
    nums為所輸入的list;
    target是給定的需要求和的兩個數的和;
    可以採用兩個for迴圈來進行列舉法計算出list當中所有的兩數之和,如果與traget相等,則返回兩個數的下標。
class Solution:
    def twoSum(self, nums: List[
int], target: int) -> List[int]: n = len(nums) for i in range(n): for j in range(i + 1, n): if nums[i] + nums[j] == target: return [i, j] return []

此方法的時間複雜度為 O(N^2)

  1. Solution 2
    採用雜湊表的方式[1]

    *散列表(Hash table,也叫雜湊表),是根據鍵(Key)而直接訪問在記憶體儲存位置的資料結構。也就是說,它通過計算一個關於鍵值的函式,將所需查詢的資料對映到表中一個位置來訪問記錄,這加快了查詢速度。這個對映函式稱做雜湊函式,存放記錄的陣列稱做散列表。一個通俗的例子是,為了查詢電話簿中某人的號碼,可以建立一個按照人名首字母順序排列的表(即建立人名{\displaystyle x}x到首字母{\displaystyle F(x)}F(x)的一個函式關係),在首字母為W的表中查詢“王”姓的電話號碼,顯然比直接查詢就要快得多。這裡使用人名作為關鍵字,“取首字母”是這個例子中雜湊函式的函式法則{\displaystyle F()}F(),存放首字母的表對應散列表。關鍵字和函式法則理論上可以任意確定。

    將nums陣列存入雜湊表當中,然後在雜湊表中查詢數值為 " target - nums[i] " 的數的下標。在使用的過程中,在查詢部分可以將時間複雜度從O(N)降低為O(1)。

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        hashtable = dict()
        for i, num in enumerate(nums):
            if target - num in hashtable:
                return
[hashtable[target - num], i] hashtable[nums[i]] = i return []

此方法的時間複雜度為O(N)

Reference:
[1] https://zh.wikipedia.org/wiki/%E5%93%88%E5%B8%8C%E8%A1%A8

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/two-sum
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。