• 补2020-01-19 数组 两数之和


    题目链接:https://leetcode-cn.com/problems/two-sum/

    题目描述:

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

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

    你可以按任意顺序返回答案。

     

    示例 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]

    来源:力扣(LeetCode)

    题目思想:

    爆破解法:使用穷举法,列举每一个i位置跟nums.size()-i 位置的可能性,进行加和判断查找

    题目代码:

     1 class Solution {
     2 public:
     3     vector<int> twoSum(vector<int>& nums, int target) {
     4         //if(nums.size()<2 || nums.size() >10*10*10) return 0;
     5         for(int i = 0; i < nums.size(); i++){
     6              for(int j = i+1; j < nums.size(); j++){
     7                  if(nums[i] + nums[j] == target){
     8                      return {i, j};
     9                  }
    10              }
    11                 }
    12                 return {};
    13     }
    14     i

    题目其他解:

    使用哈希表进行查找

    哈希表的思路:

    首先进行数组遍历,将第一个位置数值存入哈希表,然后进行下一个判断,判断哈希表是不是存在target-nums[i+1];存在就返回结果,不存在则进行下一个表录入,判断

    哈希表解法的代码:

     1 class Solution {
     2 public:
     3     vector<int> twoSum(vector<int>& nums, int target) {
     4         unordered_map<int, int> hashtable;
     5         for (int i = 0; i < nums.size(); ++i) {
     6             auto it = hashtable.find(target - nums[i]);
     7             if (it != hashtable.end()) {
     8                 return {it->second, i};
     9             }
    10             hashtable[nums[i]] = i;
    11         }
    12         return {};
    13     }
    14 };
  • 相关阅读:
    POJ 1222 高斯消元更稳
    Maven与Eclipse使用中遇到的问题解决之道
    Java并发之任务的描述和执行
    XMemcached简单使用示例
    Java的容器类小结
    Java系统属性与Preferences API的简单介绍
    你知道自己执行的是哪个jre吗?
    Log4J配置文件详解
    Java日志工具之SLF4J
    Java日志工具之Log4J
  • 原文地址:https://www.cnblogs.com/gjianli/p/14310427.html
Copyright © 2020-2023  润新知