您好,登錄后才能下訂單哦!
本篇內容介紹了“C++怎么求兩數之和并返回下標”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
給定一個整數數組 nums 和一個整數目標值 target,請你在該數組中找出 和為目標值 target 的那 兩個 整數,并返回它們的數組下標。
ACM模式
核心代碼模式
方法一:
創建vector
添加元素
刪除元素
其他
方法二:
auto的使用
unordered_map
查找元素是否存在
若有unordered_map <int, int> mp;查找x是否在map中
類
總結:
你可以假設每種輸入只會對應一個答案。但是,數組中同一個元素在答案里不能重復出現。
你可以按任意順序返回答案。
示例:
輸入:nums = [2,7,11,15], target = 9
輸出:[0,1]
解釋:因為 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
#include <iostream> #include <vector> #include <unordered_map> using namespace std; int main(){ vector<int> nums{ 2, 7, 11, 13 }; //原數組 vector<int> vec; //存放結果 int target = 18; unordered_map<int, int> ump; for (int i = 0; i < nums.size(); ++i){ auto it = ump.find(target - nums[i]); if (it != ump.end()){ vec.push_back(it->second); //將值插入vec中 vec.push_back(i); } ump[nums[i]] = i; //鍵值對的存入 } for (int i = 0; i < vec.size(); ++i){ cout << vec[i] << endl; } }
class Solution { public: vector<int> TwoSum(vector<int>&nums, int target) { int n = nums.size; for (int i = 0; i < n - 1; ++i) { for (int j = i + 1; j < n; ++j) { if (nums[i] + nums[j] == target) return{ i, j }; } } return{}; //空的{}表示一個空的vector<int> } };
使用vector需要添加頭文件
#include <vector> using namespace std;
vector<int> nums; //不指定長度: vector<int> nums(n); //指定長度為n: vector<int> nums(10,1);//定義具有10個整型元素的向量,且給出的每個元素初值為1 //nums后面是括號()不是大括號{}
直接從數組末端添加:
nums.push_back(1);
直接賦值給第i個位置:
nums[i] = 1;
直接將數組長度減小,某種方式上刪掉了后面i個:
nums.resize(nums.size-i);
刪掉最后一個元素:
nums.pop_back();
nums.size(); //獲得長度 sort(nums.begin(),nums.end()); //排序(O(nlogn)) reverse(nums.begin(), nums.end()); //翻轉
合并兩個vector:合并nums1和nums2,并將合并后的數組賦值給nums vector<int> nums1(m),nums2(n); vector<int> nums; nums.resize(m+n); merge(nums1.begin(), nums1.end(),nums2.begin(),nums2.end(),nums);
class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { unordered_map<int,int>hashtable; // 建立哈希表 for(int i=0;i<nums.size();++i){ //nums.size后面要帶括號() // for(auto i:nums) 錯誤,因為只有知道i的類型才可以用auto auto it=hashtable.find(target-nums[i]); //返回類型是iterator迭代器 if(it!=hashtable.end()){ // 查找it是否在hashtable里 return{it->second,i}; //first是鍵(key),second是值(value) //hashtable[nums[i]]=i,first就是nums[i],second就是i } hashtable[nums[i]]=i; //存入鍵值對。 hashtable(nums[i])=i;錯誤,是[]不是() } return{}; } };
C++11中引入的auto主要有兩種用途:自動類型推斷和返回值占位。
1.自動類型推斷
auto a; 錯誤,沒有初始化表達式,無法推斷出a的類型 auto int a = 10; 錯誤,auto臨時變量的語義在C++11中已不存在, 這是舊標準的用法。 auto a = 10; auto c = 'A'; auto s("hello");
2.返回值占位
auto v = compose(2, 3.14); v 的類型是 double
unordered_map的頭文件
#include <unordered_map>
創建unordered_map容器:
unordered_map<string,string>umap; //創建好了一個可存儲 <string,string> 類型鍵值對的 unordered_map 容器 unordered_map<int,int>umap; //第一個int是鍵,第二個int是值
unordered_map容器的成員方法
begin() //返回指向容器中第一個鍵值對的正向迭代器。 end() //返回指向容器中最后一個鍵值對之后位置的正向迭代器。 find(key) //查找以 key 為鍵的鍵值對,如果找到,則返回一個指向該鍵值對的正向迭代器;反之,則返回一個指向容器中最后一個鍵值對之后位置的迭代器(如果 end() 方法返回的迭代器)。 cbegin()和 begin() //功能相同,只不過在其基礎上增加了 const 屬性,即該方法返回的迭代器不能用于修改容器內存儲的鍵值對。 cend()和 end() //功能相同,只不過在其基礎上,增加了 const 屬性,即該方法返回的迭代器不能用于修改容器內存儲的鍵值對。 empty() //若容器為空,則返回 true;否則 false。 size() //返回當前容器中存有鍵值對的個數。 max_size() //返回容器所能容納鍵值對的最大個數,不同的操作系統,其返回值亦不相同。 operator[key] //該模板類中重載了 [] 運算符,其功能是可以向訪問數組中元素那樣,只要給定某個鍵值對的鍵 key,就可以獲取該鍵對應的值。注意,如果當前容器中沒有以 key 為鍵的鍵值對,則其會使用該鍵向當前容器中插入一個新鍵值對。 at(key) //返回容器中存儲的鍵 key 對應的值,如果 key 不存在,則會拋出 out_of_range 異常。 count(key) //在容器中查找以 key 鍵的鍵值對的個數。 equal_range(key) //返回一個 pair 對象,其包含 2 個迭代器,用于表明當前容器中鍵為 key 的鍵值對所在的范圍。 emplace() //向容器中添加新鍵值對,效率比 insert() 方法高。 emplace_hint() //向容器中添加新鍵值對,效率比 insert() 方法高。 insert() //向容器中添加新鍵值對。 erase() //刪除指定鍵值對。 clear() //清空容器,即刪除容器中存儲的所有鍵值對。 swap() //交換 2 個 unordered_map 容器存儲的鍵值對,前提是必須保證這 2 個容器的類型完全相等。 bucket_count() //返回當前容器底層存儲鍵值對時,使用桶(一個線性鏈表代表一個桶)的數量。 max_bucket_count() //返回當前系統中,unordered_map 容器底層最多可以使用多少桶。 bucket_size(n) //返回第 n 個桶中存儲鍵值對的數量。 bucket(key) //返回以 key 為鍵的鍵值對所在桶的編號。 load_factor() //返回 unordered_map 容器中當前的負載因子。負載因子,指的是的當前容器中存儲鍵值對的數量(size())和使用桶數(bucket_count())的比值,即 load_factor() = size() / bucket_count()。 max_load_factor() //返回或者設置當前 unordered_map 容器的負載因子。 rehash(n) //將當前容器底層使用桶的數量設置為 n。 reserve() //將存儲桶的數量(也就是 bucket_count() 方法的返回值)設置為至少容納count個元(不超過最大負載因子)所需的數量,并重新整理容器。 hash_function() //返回當前容器使用的哈希函數對象。
方法1: 若存在 mp.find(x) != mp.end() 方法2: 若存在 mp.count(x) != 0
c++中當定義類對象是指針對象時候,就需要用到 -> 指向類中的成員;
當定義一般對象時候時就需要用到 “.” 指向類中的成員。
例如:
class A { public play(); }
如果定義如下:
A *p則使用:p->play(); 左邊是結構指針。
A p 則使用:p.paly(); 左邊是結構變量。
箭頭(->):左邊必須為指針;
點號(.):左邊必須為實體。
“C++怎么求兩數之和并返回下標”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。