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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Lintcode--2(56)--两数之和

發(fā)布時(shí)間:2023/12/2 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Lintcode--2(56)--两数之和 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目:給一個(gè)整數(shù)數(shù)組,找到兩個(gè)數(shù)使得他們的和等于一個(gè)給定的數(shù) target。

? ? ? 你需要實(shí)現(xiàn)的函數(shù)twoSum需要返回這兩個(gè)數(shù)的下標(biāo), 并且第一個(gè)下標(biāo)小于第二個(gè)下標(biāo)。注意這里下標(biāo)的范圍是 0 到 n-1。
注意事項(xiàng)
? ? ?你可以假設(shè)只有一組答案。
樣例

? ? ?給出 numbers = [2, 7, 11, 15], target = 9, 返回 [0, 1].

1.暴力搜索,復(fù)雜度為O(n2)

class Solution { public: /* * @param numbers: An array of Integer * @param target: target = numbers[index1] + numbers[index2] * @return: [index1 + 1, index2 + 1] (index1 < index2) */vector<int> twoSum(vector<int> &numbers, int target) { // write your code here vector<int> idx(2);//申請(qǐng)一個(gè)大小為2的容器存放下標(biāo) for(int i=0; i<numbers.size(); i++) { for(int j=numbers.size()-1; j>=0; j--) { if(numbers[i]+numbers[j]==target && i!=j) { idx[1] = i; idx[0] = j; } } }if(idx[0]>idx[1])//交換兩數(shù) { idx[0] = idx[0]^idx[1]^idx[0];//方法錯(cuò)誤,輸出的都是0 idx[1] = idx[0]^idx[1]^idx[1];}return idx;} }; ? ?注意:上述交換兩數(shù)的方法輸出的都是0

2、哈希表,復(fù)雜度為O(n)?

? ? 原理:基本原理:創(chuàng)建一個(gè)hashmap,先把所有的值存在hashmap中,其中關(guān)鍵字key是元素的值,value為對(duì)應(yīng)元素的下標(biāo)。待查找的關(guān)鍵字為target - nums[i],遍歷數(shù)組直到找到則返回其在數(shù)組中的下標(biāo)。時(shí)間復(fù)雜度為O(n)。

class Solution { public:/** @param numbers : An array of Integer* @param target : target = numbers[index1] + numbers[index2]* @return : [index1+1, index2+1] (index1 < index2)*/vector<int> twoSum(vector<int> &nums, int target) {// write your code hereint size = nums.size();int i = 0;vector<int> result;//這里不能定義長(zhǎng)度為2,否則會(huì)輸出四個(gè)數(shù)if(size < 2) //判斷是否為空{(diào)return result;}map<int, int> hashMap;//創(chuàng)建一個(gè)map,key是元素的值,value是元素原來(lái)的下標(biāo)for(i=0; i<size; i++) {hashMap.insert(pair<int, int>(nums[i], i));//把所有的元素值和下標(biāo)插入到map}for(i=0; i<size; i++) {int temp = target - nums[i];if (hashMap.count(temp)!=0 && hashMap[temp]!=i) //hashMap.count(temp)是temp在表中出現(xiàn)的次數(shù){result.push_back(i);result.push_back(hashMap[temp]);break;//只要找到就跳出循環(huán)}}if(result[0] > result[1]) //調(diào)整大小順序{int temp = result[0];result[0] = result[1];result[1] = temp;}return result;} }; 參考:1.https://www.cnblogs.com/libaoquan/p/6808064.html

? ? ? ? ?2.http://blog.csdn.net/kkdd2013/article/details/51953035


總結(jié)

以上是生活随笔為你收集整理的Lintcode--2(56)--两数之和的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。