leetcode(一)刷题两数之和
生活随笔
收集整理的這篇文章主要介紹了
leetcode(一)刷题两数之和
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
給定一個整數數組 nums 和一個整數目標值 target,請你在該數組中找出 和為目標值 target 的那 兩個 整數,并返回它們的數組下標。
示例 1:
輸入:nums = [2,7,11,15], target = 9
輸出:[0,1]
解釋:因為 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
示例 2:
輸入:nums = [3,2,4], target = 6
輸出:[1,2]
示例 3:
輸入:nums = [3,3], target = 6
輸出:[0,1]
首先第一種方法比較簡單,可以直接暴力破解,用雙重for循環遍歷
class Solution { public:vector<int> twoSum(vector<int>& nums, int target) {vector<int> temp;int i, j;for (i = 0; i < nums.size(); i++){for (j = i + 1; j < nums.size(); j++){if ((nums[i] + nums[j]) == target){temp.push_back(i);temp.push_back(j);return temp;}}}return temp;} };此方法的時間復雜度是O(n^2)
經過提示我們可以進一步的改進這個算法,我們可以采用時間換空間的方式,采用哈希表來完成
class Solution { public:vector<int> twoSum(vector<int>& nums, int target) {int i;unordered_map<int, int> hs_map;unordered_map<int, int>::iterator it;vector<int> temp;for (i = 0; i < nums.size(); i++){it = hs_map.find(target-nums[i]);if (it != hs_map.end()){temp.push_back(it->second);temp.push_back(i);return temp;}hs_map.insert(pair<int, int>(nums[i],i));}return temp;} };此算法的時間復雜度是O(n),最好的情況下能達到O(1)
總結
以上是生活随笔為你收集整理的leetcode(一)刷题两数之和的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 当贝x3投影仪5年以后能淘汰吗
- 下一篇: leetcode(二)二分法查找算法