两数之和(力扣)- 穷举

强颜欢笑 提交于 2020-02-27 21:19:29

两数之和

一、题目

原题目如下: [乐扣-两数之和](https://leetcode-cn.com/problems/two-sum/)

1、题目描述

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

2、示例

给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]

3、代码函数部分

class Solution {
public:
	vector<int> twoSum(vector<int>& nums, int target) {
};

二、题解

(这个方法大概就是最先想到,最不用动脑子的方法吧)

1、思路

穷举出所有的数对,同一个数字不可以用两遍,也就是一个数对,不可以是相同的一个数字,将数对的值加起来,与目标值比较。若相同就返回数对所在数组的下标,若不相同,就继续。若找不到就返回为空

2、代码实现

class Solution {
public:
	vector<int> twoSum(vector<int>& nums, int target) {
		int i,j;
		for(i=0;i<nums.size()-1;i++)
		{
			for( j=i+1;j<nums.size();j++)
			{
				int res=nums[i]+nums[j];
				if(res==target) 
				{
					return {i,j};
				}
			}
		}
		return {i,j};
	}
};

(2.0版本,有错误)

3、遇到的问题

首先第一个问题,因为以前没怎么接触过vector,或者接触的时候,就跳过了,换用了别的方法。所以对于vector可以说是陌生的。vector通俗的理解就是动态数组吧。那么该怎么遍历数组,知道数组里面有多少元素呢?在这里学的方法是,利用nums.size()知道数组里面有多少元素。然后进行遍历。 第二个问题,其实最开始我的代码不是这样的。(1.0版本)

第九行return(i,j);会报错 报错结果如下:

	solution.cpp: In member function twoSum
	Line 9: Char 30: error: could not convert '((void)0, j)' from 'int' to 'std::vector<int>'
	return (i,j);

真的明白为什么return{i,j}不对,return{i,j}就对了,现在也不明白,有心人解答一下啊啊啊 现在在修正的时候发现,二改的代码也不对。最后的返回,如果没有就应该为空,所以第十三行代码应该改为return{}; 最后正确的版本应该是(3.0)

	class Solution {
	public:
		vector<int> twoSum(vector<int>& nums,int target) {
			int i,j;
			for(i=0;i<nums.size()-1;i++){
				for( j=i+1;j<nums.size();j++){
					int res=nums[i]+nums[j];
					if(res==target) {
						return {i,j};
					}
				}
			}
			return {};
		}
	};

4、时间及内存消耗

执行用时 内存消耗 语言
184ms 9.3MB Cpp
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!