1.Two Sum解答随笔

Decsription:

Given an array of integers, return indices of the two numbers such that they add up to a specific target.

You may assume that each input would have exactly one solution, and you may not use the same element twice.

 for example

Given nums = [2, 7, 11, 15], target = 9,

Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].

 

难度:easy。

 

在解答方法中,根据它给出的解答框架使用了vector容器作为解题的工具。这里摘录vector的相关属性如下,以备记忆

解题思路:

      1.定义一个vector容器nums1作为输入数组的替身,对该替身使用sort函数进行内部元素的排序。

      2.接着,对头尾两端(以num1[a],num1[b]代替)元素进行加法操作,如果结果等于target,则进入下一步骤;否则比较相加结果与target的大小,若大于target,则末端b自减1,反之a自加1。该循环在相加结果等于target时结束

      3.经过步骤2,已经得到了nums1中符合题目要求的元素位置,此时需要找到nums中对应的元素位置,所以设置一个循环部分检测nums1与nums中哪些元素相等,保存位置信息,最后输出。

 

这个方法的步骤2其实与快速排序中的遴选关键字的方法相似。由于前期已经把nums1的元素排好顺序,所以这种方法不会遗漏掉符合条件的元素。

代码如下:

class Solution {
public:

vector<int> twoSum(vector<int>& nums, int target) {
vector<int> nums1=nums;
sort(nums1.begin(),nums1.end());
int x=0,y=nums1.size()-1;

while(x<y){
if(nums1[x]+nums1[y]>target) y--;
else if(nums1[x]+nums1[y]<target) x++;
else break;
}

vector<int> answer;
for(int i=0;i<nums.size();i++){
if(nums[i]==nums1[x]) answer.push_back(i);
else if(nums[i]==nums1[y]) answer.push_back(i);
}

if(answer[0]>answer[1]) swap(answer[0],answer[1]);
return answer;
}
};

 

 

 

 
posted @ 2017-02-23 23:27  legooooo  阅读(222)  评论(0编辑  收藏  举报