• 题目描述:(LeetCode中国)
    给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
    你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
  • 比如:给定一个数组[1,3,6,7],target=13,返回的数组应该为[2,3](6+7=13)
  • 解法1:暴力解法,也是最容易想到的
class Solution {public int[] twoSum(int[] nums, int target) {int[] result=new int[2];for(int i=0;i<nums.length;i++){for(int j=i+1;j<nums.length;j++){if(nums[i]+nums[j]==target){result[0]=i;result[1]=j;return result;}}}throw new IllegalArgumentException("数组中没有两数满足要求");}
}

这种解法的时间复杂度为O(n^2),空间复杂度为O(1)(关于时空复杂度的知识,可以看这位博主的文章)

  • 解法2:两遍哈希表
    先把数组中的数据和他对应的下标保存在一个hash表中,然后再遍历一次,查找temp=target-nums[j]有没有在hash表中,特别地:如果当前nums[j]刚刚好是target的一半,我们要保证temp不是nums[j]本身,因此还要比较他们的下标,下标不同并且能在表中找到temp,说明就是我们要找的数据。
class Solution {public int[] twoSum(int[] nums, int target) {Map<Integer,Integer> map=new HashMap<>();for(int i=0;i<nums.length;i++){map.put(nums[i],i);}for(int j=0;j<nums.length;j++){int temp=target-nums[j];if(map.containsKey(temp)&&map.get(temp)!=j){//哈希表中包含temp,并且temp对应的下标不是jreturn new int[] {j,map.get(temp)};}}throw new IllegalArgumentException("数组中没有两数满足要求");}
}

时间复杂度:O(n),空间复杂度:O(n)

  • 解法3:一遍哈希表
    同上面的思路,我们可以在将数据放入hash表的过程中,在放入之前我们先比较temp=target-nums[i]是否在表中存在,如果存在的话我们直接返回不必再放入表中。
class Solution {public int[] twoSum(int[] nums, int target) {Map<Integer,Integer> map=new HashMap<>();for(int i=0;i<nums.length;i++){int temp=target-nums[i];if(map.containsKey(temp)){//哈希表中包含temp,这时temp必不可能是nums[i]return new int[] {i,map.get(temp)};}map.put(nums[i],i);}throw new IllegalArgumentException("数组中没有两数满足要求");}
}

LeetCode入门题 两数之和相关推荐

  1. LeetCode刷题-两数之和(持续更新)

    文章目录 LeetCode 1. Two Sum (两数之和) 题目描述 样例 解题思路一(暴力法) 解题思路二(使用map) 前言:最近业余时间,一直在看LeetCode上面的题,上面有许多好的解题 ...

  2. LeetCode第一题两数之和---JavaScript

    给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标. 你可以假设每种输入只会对应一个答案.但是,数组中同一 ...

  3. LeetCode第一题两数之和

    题目: 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标.你可以假设每种输入只会对应一个答案.但是,数 ...

  4. php算法两数之和 复杂度,每天一道leetcode算法题:两数之和-php版

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

  5. leetcode算法题--两数之和

    题目地址:https://leetcode-cn.com/problems/two-sum/ vector<int> twoSum(vector<int>& nums, ...

  6. LeetCode题库第1题 两数之和

    两数之和 LeetCode题库第1题 两数之和 看到题,我就想到了暴力法: public int[] force(int[] nums,int target) {for (int i = 0; i & ...

  7. leetcode系列--1.两数之和

    leetcode 第1题 两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标. 你可以假设每种输 ...

  8. LeetCode:1.两数之和

    LeetCode:1.两数之和 第一次写题解,也第一次做leetcode,不妥之处还望海涵 一.暴力 //cpp class Solution {public:vector<int> tw ...

  9. leetCode刷题-第二题两数之和

    两数之和 题目连接: 题目链接 给你两个 非空 的链表,表示两个非负的整数.它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字. 请你将两个数相加,并以相同形式返回一个表示和的 ...

  10. LeetCode 01【两数之和】【LeetCode人生第一题!】

    刷题官网:https://leetcode-cn.com/ 目   录 题目 官方题解 方法一:暴力法 方法二:两遍哈希表 方法三:一遍哈希表 初次提交 题目 官方题解 方法一:暴力法 暴力法很简单, ...

最新文章

  1. 自动关闭模态框_Dialog 弹出框
  2. 物理化学 化学 动力学(中)
  3. c语言双循环计算n的阶乘,用C语言用循环实现N的阶乘
  4. mysql group by自定义_mysql – GROUP BY和自定义顺序
  5. ICLR最高分论文揭秘模型泛化,GNN是潜力股
  6. lastindexof php,javascript 中查找指定字符串indexOf(),lastIndexOf(),match()
  7. 大厂技术文档:Python 基础+爬虫+数据分析+面试经精选
  8. JavaScript-包装类型
  9. 大数据测试之hadoop命令大全
  10. Springboot打包部署到linux服务器的方法
  11. DllMain 用法
  12. python实现整数反转
  13. qq互联android sdk,qq互联.Android_SDK_V2.0使用说明.doc
  14. DES算法的介绍和实现(转的,其实3des一样的原理就是加密解密加密而已)
  15. sim_com AT
  16. HashMap集合(高级)
  17. MATLAB画图(一)
  18. 如果获取token?
  19. 今天,昆山向全世界发出邀请!
  20. 涨姿势:在线黑科技小工具,方便快捷

热门文章

  1. 怎样把DataSet转换成ArrayList
  2. python入口文件详解_Python基础系列讲解——那些py文件中容易忽略的细节
  3. 编译器GCC的Windows版本 : MinGW-w64安装教程
  4. 华为P30将在3月26日发布
  5. 用canvas画一个刮刮卡
  6. Python 常用函数Logging
  7. 征信考量社交化和大数据化
  8. 老翟书摘:《丰田生产方式》
  9. IOS的Application以及IOS目录的介绍
  10. Spring Mvc前台访问报404