首页 > 代码库 > Leetcode 给一个数a和一个向量b,找出该向量b中的2个数相加等于a,并输出这两个数在向量中的位置

Leetcode 给一个数a和一个向量b,找出该向量b中的2个数相加等于a,并输出这两个数在向量中的位置

  看C++primer Plus看的无聊,第一次做Leetcode的练习,本来想做二维向量的,结果始终通不过,查了原因,必须用一维的。。。

一维的答案:

  class Solution {
   public:
    vector<int> twoSum(vector<int>& nums, int target)
    {
     int cout = nums.size();  //得到向量的大小
     vector<int>ret;  //定义向量  
     for (int i = 0; i<cout; i++)
     {
      for (int j = i + 1; j<cout; j++)
      {
       if ((nums[i] + nums[j]) == target)
       {
               ret.push_back(i);              //得到目标值对应的位置
        ret.push_back(j) ;
       }
      }
     }
     return ret;
    }
   };

二维的答案:

class Solution {  

public:   vector<vector<int>> twoSum(vector<int>& nums, int target)  

 {    int cout = nums.size();  //得到二维向量的大小    

vector<vector<int>>ret(cout);  //定义二维向量    

  for (int i = 0; i <cout; i++)     

ret[i].resize(2);    //初始化二维向量    

int i0 = 0;   

 for (int i = 0; i<cout; i++)   

 {     for (int j = i + 1; j<cout; j++)     

{      if ((nums[i] + nums[j]) == target)     

 {       ret[i0][0] = i;              //得到目标值对应的位置     

  ret[i0][1] = j;      

 i0++;      

}    

 }   

 }   

 ret.resize(i0 + 1); //只保留有用的部分    

for (int i = 0; i < i0; i++)

    std:: cout << ret[i][0] << "," << ret[i][1] << std::endl;

return ret;

  }  

};

 

Leetcode 给一个数a和一个向量b,找出该向量b中的2个数相加等于a,并输出这两个数在向量中的位置