0
点赞
收藏
分享

微信扫一扫

LeetCode简单题-两数之和

12a597c01003 2022-04-14 阅读 33
leetcode

LeetCode简单题-两数之和的解法

示例 1:

输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

示例 2:

输入:nums = [3,2,4], target = 6
输出:[1,2]

示例 3:

输入:nums = [3,3], target = 6
输出:[0,1]

方法1-两层for循环

C++解法

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
		int i,j;//定义两个数的下标
		int len = nums.size();//nums.size()获取向量元素个数
		for(i = 0; i < len - 1; i++)
		{
			for(j = i+1; j < len; j++)
			{
				if(nums[i]+nums[j] == target)
					return {i,j};
			}
		}
    }
};

C解法

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* twoSum(int* nums, int numsSize, int target, int* returnSize){
	int i,j;//两数的下标
	int *result = NULL;
	*returnSize = 0;
	
	for(i = 0; i < numsSize-1; i++)
	{	
		for(j = i+1; j < numSize; j++)
		{
			if(nums[i] + nums[j] == target)
			{
				result = malloc(sizeof(int)*2);
				if(result != NULL)
				{
					result[0] = i;
					result[1] = j;
					*returnSize = 2;
					return result;
				}
			}
		}
	}
	return result;
}

暴力解法使用了两层循环,时间复杂度是O(n^2),空间复杂度为O(1);

2.哈希解法

暴力哈希解法1–用到了两层for循环

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
		map<int,int> hash;//建立hash表存放数组元素,key:数组元素的数值,value:数组元素下标
		vector<int> result(2,-1);//创建一个数组,长度为2,初始值-1
		//将数组元素和下标以对组的形式存入hash表
		for(int i = 0; i < nums.size(); i++)
			hash.insert(make_pair(nums[i],i));
		//一个数为nums[i],另外一个数为target-nums[i]
		for(int j = 0; j < nums.size(); j++)
		{
			//在hash表中查找key=target-nums[i]
			if(hash.count(target-nums[i]) > 0 && hash[target-nums[i]] != i)
			{
				result[0] = i;
				result[1] = hash[target-nums[i]];
				break;
			}
		}
		
		return result;
    }
};

改进哈希解法1–用到了一层for循环

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
		map<int,int> hash;//建立hash表存放数组元素,key:数组元素的数值,value:数组元素下标
		vector<int> result(2,-1);//创建一个数组,长度为2,初始值-1

		for(int i = 0; i < nums.size(); i++)
		{
			hash.insert(make_pair(nums[i],i));
			//在hash表中查找key=target-nums[i]
			if(hash.count(target-nums[i]) > 0 && hash[target-nums[i]] != i)
			{
				result[0] = i;
				result[1] = hash[target-nums[i]];
				break;
			}
		}
		return result;
    }
};
举报

相关推荐

0 条评论