现在的位置: 首页 > 综合 > 正文

Two Sum

2018年04月29日 ⁄ 综合 ⁄ 共 1061字 ⁄ 字号 评论关闭
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

class Solution1 {
public:
    vector<int> twoSum(vector<int> &numbers, int target) 
	{
		vector<int> v;
    	for(int i = 0; i < numbers.size(); ++i)
		{
			for(int j = i + 1; j < numbers.size(); ++j)
			{
				if(numbers[i] + numbers[j] == target)
				{
					v.push_back(i + 1);
					v.push_back(j + 1);
					return v;
				}
			}
		}    
    }
};

struct node
{
	int data;
	int pos;
};

bool cmp(node a, node b)
{
	return a.data < b.data;
}

class Solution {
public:
    vector<int> twoSum(vector<int> &numbers, int target) 
	{
		vector<int> v;
		vector<node> v1;
		int i, val, len = numbers.size();

		for (i = 0; i < len; ++i)
		{
			node tmp;
			tmp.data = numbers[i];
			tmp.pos = i;
			v1.push_back(tmp);
		}
 
		sort(v1.begin(), v1.end(), cmp);
		
    	for(i = 0; i < len; ++i)
		{
		    val = target - v1[i].data;
		    int lhs = i + 1, rhs = len - 1;
		    
			while(lhs <= rhs)
			{
			    int mid = (lhs + rhs) >> 1;
			    
			    if(v1[mid].data == val)
			    {
					if(v1[i].pos < v1[mid].pos)
					{
						v.push_back(v1[i].pos + 1);
						v.push_back(v1[mid].pos + 1);
					}
					else
					{
						v.push_back(v1[mid].pos + 1);
						v.push_back(v1[i].pos + 1);
					}
					return v;
			    }
			    
			    if(v1[mid].data < val)
			    {
			        lhs = mid + 1;
			    }
			    else
			    {
			        rhs = mid - 1;
			    }
			}
		}
		return v;
    }
};

int main(void)
{
	int a[] = {
		3, 2, 4
	};
	vector<int> vs(a, a + 3);
	Solution s;
	vector<int> re = s.twoSum(vs, 6);
	
	cout << re[0] << " " << re[1] << endl;
	 
	return 0;
}

【上篇】
【下篇】

抱歉!评论已关闭.