10°

两数之和(力扣)- 穷举

两数之和

一、题目

原题目如下: [乐扣-两数之和](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();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();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

本文由【迪迪迪王】发布于开源中国,原文链接:https://my.oschina.net/u/4443770/blog/3158006

全部评论: 0

    我有话说: