【LeetCode】两数之和

   日期:2020-08-30     浏览:90    评论:0    
核心提示:01、目录目录01、目录02、问题描述03、思路04、代码实现05、小结02、问题描述两数之和:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]03、思路首先,我们看到这

01、目录

目录

      • 01、目录
      • 02、问题描述
      • 03、思路
      • 04、代码实现
      • 05、小结

02、问题描述

两数之和:

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

  • 示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

03、思路

首先,我们看到这个题目和示例,我们就应该清楚的明白,就是一个判断数组中任意两数之和是否能够匹配目标值。这是腾讯的一道简单面试题。

我的思路:既然是求任意两数之和,又不能重复,例如nums[1] + nums[1]这是不合题意的。
那就直接两个循环,然后依次遍历相加,这种是在不在意内存和时间的情况下,暴力求解。

04、代码实现

  • C++代码:
class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        vector<int> vec;
        for(int i = 0; i < nums.size()-1; i++)
        {
            for(int j = i+1; j < nums.size(); j++)
            {
                if(nums[i]+nums[j] == target)
                {//添加进容器
                    vec.push_back(i);
                    vec.push_back(j);
                }
            }
        }
        return vec; //返回容器,如果没有找到就是返回一个NULL容器
    }
};

  • C代码:
int* twoSum(int* nums, int numsSize, int target, int* returnSize){
    int *ret = (int *)malloc((2*sizeof(int)));
    for(int i = 0; i < numsSize - 1; i++)
    {
        for(int j = i + 1; j < numsSize; j++)
        {
            if(nums[i] = target - nums[j])
            {
                *ret = i;
                *(ret + 1) = j;
                *returnSize = 2;
                return ret;
            }
        }
    }
    return 0;
}

05、小结

上面所用的方法都是同一种暴力解题。我看了下网上有人用哈希表解,限于博主数据结构功底确实太low,无法给予一定得见解,这里就不提哈希表这种方法了,感兴趣的可以去看看其他博主。

版权声明:转载请注明出处,谢谢。

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服