一、题目

难度:简单

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 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]

三、简单分析

简单理解一下哈,力扣直接标记出简单,说实话,对于一个算法不太了解的人,确实不太明白。通过一些资料慢慢理解了。在这里分享给大家,主要是思路。

给我们一个数组,然后一个目标值。我们不用想要得到数组下标,肯定要进行便利数组,然后进行比较找出答案。

最简单的就是两个便利然后组合进行判断是否符合目标值,当然这样的效率也是比较慢,随着数组的越大,效率就会直线下降。这样的时间复杂度为O(n^2)。就和冒泡排序一样两个for进行挨个比较!

四、暴力便利

public static int[] twoSum1(int[] nums,int target) {
for (int i = 0; i < nums.length; i++) {
for (int j = i + 1; j < nums.length; j++) {
if (nums[i] + nums[j] == target) {
return new int[]{i, j};
}
}
}
return null;
}
public static void main(String[] args) {
int nums[] = {2,4,6,7};
int target = 10;
int[] ints = twoSum1(nums, target);
for (int i = 0;i < ints.length; i++){
System.out.println(ints[i]);
}
}

五、进阶HashMap实现

public int[] twoSum2(int[] nums, int target) {
Map<Integer, Integer> map = new HashMap<>(); for (int i = 0; i < nums.length; i++) {
int result = target - nums[i];
if (map.containsKey(result)) {
return new int[] { map.get(result), i };
}
map.put(nums[i], i);
}
return new int[]{};
} public static void main(String[] args) {
int nums[] = {2,4,6,7};
int target = 6;
int[] ints = twoSum2(nums, target);
for (int i = 0;i < ints.length; i++){
System.out.println(ints[i]);
}
}

六、进阶分析

利用HashMap的containsKey()方法,哈希查找效率提升到O(n),遍历数组 nums,i为当前下标,每个值都判断map中是否存在 target-nums[i] 的key值,每次都把没找到的放进集合里,以例子来说:

第一次便利2 6 - 2 = 4 ,判断map里没有4这个key,我们把i的值2放进map里key为值,value为下标

第二次便利4 6 - 4 = 2,判断map,发现key有2,则直接返回结果作为key的map对应的value也就是0下标,第二个就是本次便利的i=4的下标1

依次放下进行继续遍历找到为止。

力扣算法经典第一题——两数之和(Java两种方式实现)的更多相关文章

  1. 两数之和,两数相加(leetcode)

    我们都知道算法是程序员成长重要的一环,怎么才能提高算法呢, 出来在网上看视频之外,动手练习是非常重要的.leetcode 就是一个非常好的锻炼平台. 1. 两数之和,在 leetcode 里面是属于 ...

  2. 力扣(LeetCode)15. 三数之和

    给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组. 注意:答案中不可以包含重复的三元组. ...

  3. 1. 两数之和 Java解法

    这题属于Leetcode的签到题,基本上每个人一进来就是这题. 用哈希思想来做就是最好的解答. 如果一个target - num[i] 存在那么就返回那个数字对应的下标和当前元素的下标. public ...

  4. LeetCode 170. Two Sum III - Data structure design (两数之和之三 - 数据结构设计)$

    Design and implement a TwoSum class. It should support the following operations: add and find. add - ...

  5. LeetCode 第15题-三数之和

    1. 题目 2.题目分析与思路 3.思路 1. 题目 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且 ...

  6. 2020-06-22:已知两个非负数的异或值为M,两数之和为N,求这两个数?

    福哥答案2020-06-22: 1.遍历法时间复杂度:O(N)最好空间复杂度:O(1)平均空间复杂度:O(sqrt(N))最坏空间复杂度:O(N)[0,N/2]依次遍历,符合条件的就是需要的结果. 2 ...

  7. Newtonsoft.Json C# Json序列化和反序列化工具的使用、类型方法大全 C# 算法题系列(二) 各位相加、整数反转、回文数、罗马数字转整数 C# 算法题系列(一) 两数之和、无重复字符的最长子串 DateTime Tips c#发送邮件,可发送多个附件 MVC图片上传详解

    Newtonsoft.Json C# Json序列化和反序列化工具的使用.类型方法大全   Newtonsoft.Json Newtonsoft.Json 是.Net平台操作Json的工具,他的介绍就 ...

  8. 南大算法设计与分析课程OJ答案代码(1)中位数附近2k+1个数、任意两数之和是否等于给定数

    问题1 用来测试的,就不说了 问题2:中位数附近2k+1个数 给出一串整型数 a1,a2,...,an 以及一个较小的常数 k,找出这串数的中位数 m 和最接近 m 的小于等于 m 的 k 个数,以及 ...

  9. leetcode刷题--两数之和(简单)

    一.序言 第一次刷leetcode的题,之前从来没有刷题然后去面试的概念,直到临近秋招,或许是秋招结束的时候才有这个意识,原来面试是需要刷题的,面试问的问题都是千篇一律的,只要刷够了题就差不多了,当然 ...

随机推荐

  1. weblogic 未授权命令执行漏洞(CVE-2020-14882,CVE-2020-14883)复现

    漏洞描述 2020年10月29日,360CERT监测发现 Weblogic ConSole HTTP 协议代码执行漏洞,该漏洞编号为 CVE-2020-14882,CVE-2020-14883 ,漏洞 ...

  2. Selenium_python自动化跨浏览器执行测试

    Selenium_python自动化跨浏览器执行测试(简单多线程案例)  转:https://www.cnblogs.com/dong-c/p/8976746.html 跨浏览器测试是功能测试的一个分 ...

  3. C# winform Visual Studio Installer打包教程,安装包

    //具体打包过程,参考下面网址 https://www.cnblogs.com/dongh/p/6868638.html VS 扩展和更新-联机 搜索 Microsoft Visual Studio ...

  4. manjora20安装搜狗输入法

    先安装好fcitx和yay yay -S fcitx-sogoupinyin sudo pacman -S base-devel 这是因为需要使用外网,需要配置代理. 注意 manjora20输入法一 ...

  5. 常用字符的ASCII码

    字母    ASCII码      十进制数 0         00110000      48 9           00111001        57 A          01000001 ...

  6. FHQtreap(我有个绝妙的理解方法,但课的时间不够[doge])

    FHQtreap板子(P1486 [NOI2004] 郁闷的出纳员) 会了FHQ,treap什么的就忘了吧...... #include<bits/stdc++.h> using name ...

  7. gin框架中的重定向

    重定向redirect func someRedirect(context *gin.Context) { context.Redirect(http.StatusMovedPermanently, ...

  8. gin框架简介

    介绍 Gin是一个golang的微框架,封装比较优雅,API友好,源码注释比较明确,具有快速灵活,容错方便等特点 对于golang而言,web框架的依赖要远比Python,Java之类的要小.自身的n ...

  9. Tomcat服务器和Servlet版本的对应关系

    Tomcat服务器和Servlet版本的对应关系 Servlet 程序从2.5版本是现在世面使用最多的版本(xml配置) 到了Servlet3.0后.就是注解版本的Servlet使用

  10. 在 K8S 中快速部署 Redis Cluster & Redisinsight

    Redis Cluster 部署 使用 Bitnami helm chart 在 K8S redis 命名空间中一键部署 Redis cluster . helm repo add bitnami h ...