2. Two Sum II – Input array is sorted

Question:
Similar to Question [1. Two Sum], except that the input array is already sorted in
ascending order.

solution1
使用兩個下標,一個i=0,一個j=nums.size();從後往前計算

//做出來還是挺開心的,問題代碼可太複雜了,答案是簡化了一波,感覺很優秀了
vector<int> twoSum(vector<int>& nums, int target)
{
	unordered_map<int, int> map;
	vector<int> ret;
	int j = nums.size()-1;
	int len = nums.size()%2;
	if (len == 1)
		len = nums.size() / 2 + 1;
	else
		len = nums.size() / 2;
	for (int i = 0; i < len; i++)
	{
		while (nums[i] + nums[j] > target)
		{
			j--;
		}
		if (nums[i] + nums[j] == target)
		{
			//cout << i << " " << j << endl;
			ret.push_back(i);
			ret.push_back(j);
		}
	}
	return ret;
}
//answer
vector<int> twoSum(vector<int>& nums, int target)
{
	vector<int> ret;
	int j = nums.size() - 1;
	int i = 0;
	while (i < j)
	{
		if (nums[i] + nums[j] == target)
		{
			//cout << i << " " << j << endl;
			ret.push_back(i);
			ret.push_back(j);
			i++; 
		}
		else if (nums[i] + nums[j] > target)
			j--;
		else
			i++;
	}
	return ret;
}

solution 2
對於有序的數組,查找效率想要高一點,考慮二分查找。

在這裏插入代碼片
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章