leetcode刷題之旅(day1)

2021-09-14 05:23:46 字數 1220 閱讀 6854

給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。

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

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

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

所以返回 [0, 1]

第一種思路-暴力法

暴力法就是依次遍歷每個元素x,並查詢是否存在乙個值與target-x相等的目標元素

時間複雜度是o(n

2)

o(n^2)

o(n2

)空間複雜度為o(n)

public int twosum(int nums, int target) ;}}

}throw new illegalargumentexception("no two sum solution");

}

第二種思路-兩遍雜湊表

使用雜湊表進行空間換時間,可以使用兩次迭代,第一次迭代,將每個元素值和他的索引新增在表中,然後第二次迭代可以將檢查每個元素所對應的目標元素是否在表中

時間複雜度為o(n)

空間複雜度為o(n)

public int twosum(int nums, int target) 

for (int i = 0; i < nums.length; i++) ;}}

throw new illegalargumentexception("no two sum solution");

}

第三種思路-一遍雜湊表

可以再進行簡化,再將元素插入表中同時,可以回頭檢查表中是否存在當前元素所對應的目標元素,存在就將其返回

時間複雜度為o(n)

空間複雜度為o(n)

public int twosum(int nums, int target) ;

}map.put(nums[i], i);

}throw new illegalargumentexception("no two sum solution");

}

Leetcode刷題之旅(Day2)

給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。示例 輸入 2 4 3 5 6 4 輸出 ...

LeetCode刷題之旅(Day4)

給定兩個大小為 m 和 n 的有序陣列 nums1 和 nums2。請你找出這兩個有序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 你可以假設 nums1 和 nums2 不會同時為空。示例 1 nums1 1,3 nums2 2 則中位數是 2.0 示例 2 nums1 1,2 ...

LeetCode刷題之旅(Day5)

給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為 1000。示例 1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb 解題思路 我們觀察到回文中心的兩側互為映象。因此,回文可以從它的中心展開,並且只有 2n 12n 1 ...