溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

C++怎么求兩數(shù)之和并返回下標

發(fā)布時間:2021-08-19 11:17:47 來源:億速云 閱讀:272 作者:chen 欄目:開發(fā)技術(shù)

本篇內(nèi)容介紹了“C++怎么求兩數(shù)之和并返回下標”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!

目錄
  • 給定一個整數(shù)數(shù)組 nums 和一個整數(shù)目標值 target,請你在該數(shù)組中找出 和為目標值 target 的那 兩個 整數(shù),并返回它們的數(shù)組下標。

  • ACM模式

  • 核心代碼模式

    • 方法一:

      • 創(chuàng)建vector

      • 添加元素

      • 刪除元素

      • 其他

    • 方法二:

      • auto的使用

      • unordered_map

      • 查找元素是否存在

      • 若有unordered_map <int, int> mp;查找x是否在map中

  • 總結(jié):

    給定一個整數(shù)數(shù)組 nums 和一個整數(shù)目標值 target,請你在該數(shù)組中找出 和為目標值 target 的那 兩個 整數(shù),并返回它們的數(shù)組下標。

    你可以假設(shè)每種輸入只會對應(yīng)一個答案。但是,數(shù)組中同一個元素在答案里不能重復(fù)出現(xiàn)。

    你可以按任意順序返回答案。

    示例:

    輸入:nums = [2,7,11,15], target = 9

    輸出:[0,1]

    解釋:因為 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

    ACM模式

    #include <iostream>
    #include <vector>
    #include <unordered_map>
    using namespace std;
    int main(){
    	vector<int> nums{ 2, 7, 11, 13 }; //原數(shù)組
    	vector<int> vec; //存放結(jié)果
    	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;
    創(chuàng)建vector
    vector<int> nums; //不指定長度:
    vector<int> nums(n); //指定長度為n:
    vector<int> nums(10,1);//定義具有10個整型元素的向量,且給出的每個元素初值為1
                           //nums后面是括號()不是大括號{}
    添加元素

    直接從數(shù)組末端添加:

    nums.push_back(1);

    直接賦值給第i個位置:

    nums[i] = 1;
    刪除元素

    直接將數(shù)組長度減小,某種方式上刪掉了后面i個:

    nums.resize(nums.size-i);

    刪掉最后一個元素:

    nums.pop_back();
    其他
    nums.size(); //獲得長度
    sort(nums.begin(),nums.end()); //排序(O(nlogn))
    reverse(nums.begin(), nums.end()); //翻轉(zhuǎn)
    合并兩個vector:合并nums1和nums2,并將合并后的數(shù)組賦值給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++怎么求兩數(shù)之和并返回下標

    auto的使用

    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

    unordered_map的頭文件

    #include <unordered_map>

    創(chuàng)建unordered_map容器:

    unordered_map<string,string>umap;
    //創(chuàng)建好了一個可存儲 <string,string> 類型鍵值對的 unordered_map 容器
    unordered_map<int,int>umap;
    //第一個int是鍵,第二個int是值

    unordered_map容器的成員方法

    begin()	//返回指向容器中第一個鍵值對的正向迭代器。
    end() 	//返回指向容器中最后一個鍵值對之后位置的正向迭代器。
    find(key)	//查找以 key 為鍵的鍵值對,如果找到,則返回一個指向該鍵值對的正向迭代器;反之,則返回一個指向容器中最后一個鍵值對之后位置的迭代器(如果 end() 方法返回的迭代器)。
    cbegin()和 begin() //功能相同,只不過在其基礎(chǔ)上增加了 const 屬性,即該方法返回的迭代器不能用于修改容器內(nèi)存儲的鍵值對。
    cend()和 end() //功能相同,只不過在其基礎(chǔ)上,增加了 const 屬性,即該方法返回的迭代器不能用于修改容器內(nèi)存儲的鍵值對。
    empty()	//若容器為空,則返回 true;否則 false。
    size()	//返回當前容器中存有鍵值對的個數(shù)。
    max_size()	//返回容器所能容納鍵值對的最大個數(shù),不同的操作系統(tǒng),其返回值亦不相同。
    operator[key]	//該模板類中重載了 [] 運算符,其功能是可以向訪問數(shù)組中元素那樣,只要給定某個鍵值對的鍵 key,就可以獲取該鍵對應(yīng)的值。注意,如果當前容器中沒有以 key 為鍵的鍵值對,則其會使用該鍵向當前容器中插入一個新鍵值對。
    at(key)	//返回容器中存儲的鍵 key 對應(yīng)的值,如果 key 不存在,則會拋出 out_of_range 異常。 
    count(key)	//在容器中查找以 key 鍵的鍵值對的個數(shù)。
    equal_range(key)	//返回一個 pair 對象,其包含 2 個迭代器,用于表明當前容器中鍵為 key 的鍵值對所在的范圍。
    emplace()	//向容器中添加新鍵值對,效率比 insert() 方法高。
    emplace_hint()	//向容器中添加新鍵值對,效率比 insert() 方法高。
    insert() 	//向容器中添加新鍵值對。
    erase()	//刪除指定鍵值對。
    clear() 	//清空容器,即刪除容器中存儲的所有鍵值對。
    swap()	//交換 2 個 unordered_map 容器存儲的鍵值對,前提是必須保證這 2 個容器的類型完全相等。
    bucket_count()	//返回當前容器底層存儲鍵值對時,使用桶(一個線性鏈表代表一個桶)的數(shù)量。
    max_bucket_count()	//返回當前系統(tǒng)中,unordered_map 容器底層最多可以使用多少桶。
    bucket_size(n)	//返回第 n 個桶中存儲鍵值對的數(shù)量。
    bucket(key)	//返回以 key 為鍵的鍵值對所在桶的編號。
    load_factor()	//返回 unordered_map 容器中當前的負載因子。負載因子,指的是的當前容器中存儲鍵值對的數(shù)量(size())和使用桶數(shù)(bucket_count())的比值,即 load_factor() = size() / bucket_count()。
    max_load_factor()	//返回或者設(shè)置當前 unordered_map 容器的負載因子。
    rehash(n)	//將當前容器底層使用桶的數(shù)量設(shè)置為 n。
    reserve()	//將存儲桶的數(shù)量(也就是 bucket_count() 方法的返回值)設(shè)置為至少容納count個元(不超過最大負載因子)所需的數(shù)量,并重新整理容器。
    hash_function()	//返回當前容器使用的哈希函數(shù)對象。
    查找元素是否存在
    若有unordered_map <int, int> mp;查找x是否在map中
    方法1:  若存在   mp.find(x) != mp.end()
    方法2:  若存在   mp.count(x) != 0

    c++中當定義類對象是指針對象時候,就需要用到 -> 指向類中的成員;
    當定義一般對象時候時就需要用到 “.” 指向類中的成員。
    例如:

    class A
    {  
        public play();
    }

    如果定義如下:

    A *p則使用:p->play(); 左邊是結(jié)構(gòu)指針。

    A p 則使用:p.paly(); 左邊是結(jié)構(gòu)變量。

    總結(jié):

    箭頭(->):左邊必須為指針;

    點號(.):左邊必須為實體。

    “C++怎么求兩數(shù)之和并返回下標”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

    向AI問一下細節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

    c++
    AI