菜鳥刷leetcode 1.Two Sum

我寫的還是最簡單的算法:

int* twoSum(int* nums, int numsSize, int target) {
    int *result=(int *)malloc(sizeof(int)*2);
	for(int i=0;i<numsSize;i++)
	{
		result[0]=i;
		for(int j=i+1;j<numsSize;j++)
		{
			if(target-nums[i]==nums[j])
			{
				result[1]=j;
				return result;
			}
		}
	}
	return NULL;
}

應該至少先排序一下,然後再循環(此題要重新做).

用c++做了一遍,用的是哈希map的做法。其實和我原來的想法差不多,都是一個一個的查,不過用哈希map的算法查找比較快。

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        vector<int> result;
		int diff=0,i=0;
		if(nums.size()<2)
			return result;
		map<int,int> temp;
		map<int,int>::iterator itmap;
		vector<int>::iterator it=nums.begin();
		for(it;it!=nums.end;it++)
		{
			diff=target-(*it);
			if(temp.find(diff)!=nums.end())
			{
				result.push_back(temp[diff]);
				result.push_back(i);
				break;
			}
			temp[*it]=i;
			i++;
		}
		return result;
    }
};


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