原题地址:two-sum

题目描述:

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

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

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

示例 1:

输入:nums = [2,7,11,15], target = 9

输出:[0,1]

解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

解答方法:

1.暴力方法:

遍历所有数的组合使其和等于target

时间复杂度是O(n^2)

代码如下:

 1 class Solution {
2 public int[] twoSum(int[] nums, int target) {
3 int ans[] = new int[2];
4 for(int i = 0; i< nums.length; i++){
5 for(int j = i + 1; j < nums.length; j++){
6 if(nums[i] + nums[j] == target){
7 ans[0] = i;
8 ans[1] = j;
9 }
10 }
11 }
12 return ans;
13 }
14 }

2.排序+双指针:

先将数组进行排序,然后通过双指针进行加和与target对比大小。

算法的时间复杂度是O(nlogn+n)=O(nlogn)

代码如下:

 1 class Solution {
2 public int[] twoSum(int[] nums, int target) {
3 int m=0, n=0, k, board=0;
4 int[] res= new int[2];
5 int[] tmpl=new int[nums.length];
6 System.arraycopy(nums,0,tmpl,0,nums.length);
7 Arrays.sort(nums);
8 for(int i=0, j=nums.length-1; i<j;){
9 if(nums[i]+nums[j]<target){
10 i++;
11 }
12 else if(nums[i]+nums[j]>target){
13 j--;
14 }
15 else if(nums[i]+nums[j]==target){
16 m=i;
17 n=j;
18 break;
19 }
20 }
21 for(k=0; k<nums.length; k++){
22 if(tmpl[k] == nums[m]){
23 res[0]=k;
24 break;
25 }
26 }
27 for(int i=0; i<nums.length; i++){
28 if(tmpl[i] == nums[n]&&i!=k){
29 res[1]=i;
30 break;
31 }
32 }
33 return res;
34 }
35 }

3.HashMap:

先将数组存储在一个哈希表中,建立数字和其坐标位置之间的映射。在通过遍历数组,用target减去该数字,就得到了要在哈希表中查找的数字。最后记录下这两个数字的下标输出即可。

时间复杂度为O(n),同时空间复杂度也是O(n)

代码如下:

 1 class Solution {
2 public int[] twoSum(int[] nums, int target) {
3 HashMap<Integer, Integer> m = new HashMap<Integer,Integer>();
4 int res[] = new int[2];
5 for(int i = 0; i < nums.length; i++){
6 m.put(nums[i], i);
7 }
8 for(int i = 0; i < nums.length; i++){
9 int t = target - nums[i];
10 if(m.containsKey(t) && m.get(t) != i){
11 res[1] = i;
12 res[0] = m.get(t);
13 }
14 }
15 return res;
16 }
17 }

[LeetCode]1.Two Sum 两数之和(Java)的更多相关文章

  1. [LeetCode] 1. Two Sum 两数之和

    Part 1. 题目描述 (easy) Given an array of integers, return indices of the two numbers such that they add ...

  2. [LeetCode]1.Two Sum 两数之和&&第一次刷题感想

    ---恢复内容开始--- 参考博客: https://www.cnblogs.com/grandyang/p/4130379.html https://blog.csdn.net/weixin_387 ...

  3. [LeetCode] 1.Two Sum 两数之和分析以及实现 (golang)

    题目描述: /* Given an array of integers, return indices of the two numbers such that they add up to a sp ...

  4. 【LeetCode】Two Sum(两数之和)

    这道题是LeetCode里的第1道题. 题目描述: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会 ...

  5. [leetcode]1. Two Sum两数之和

    Given an array of integers, return indices  of the two numbers such that they add up to a specific t ...

  6. LeetCode刷题 1. Two Sum 两数之和 详解 C++语言实现 java语言实现

    1. Two Sum 两数之和 Given an array of integers, return indices of the two numbers such that they add up ...

  7. 【LeetCode】1. Two Sum 两数之和

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 个人公众号:负雪明烛 本文关键词:two sum, 两数之和,题解,leetcode, 力 ...

  8. Leetcode:0002(两数之和)

    LeetCode:0002(两数之和) 题目描述:给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表.你可以假设除了数字 0 之外,这两 ...

  9. Leetcode(1)两数之和

    Leetcode(1)两数之和 [题目表述]: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标.你可以假设每种输入只会对应一 ...

随机推荐

  1. Spring Security OAuth2 完全解析 (流程/原理/实战定制) —— Client / ResourceServer 篇

    一.前言 本文假设读者对 Spring Security 本身原理有一定程度的了解,假设对 OAuth2 规范流程.Jwt 有基础了解,以此来对 SpringSecurity 整合 OAuth2 有个 ...

  2. Web开发之request

    request常用方法 //常用方法 //得到的是:协议+服务器地址+端口号+工程名称+资源地址+参数 String url = request.getRequestURL(); //得到的是:工程名 ...

  3. 《剑指offer》面试题63. 股票的最大利润

    问题描述 假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少? 示例 1: 输入: [7,1,5,3,6,4] 输出: 5 解释: 在第 2 天(股票价格 = ...

  4. 【刷题-LeetCode】154 Find Minimum in Rotated Sorted Array II

    Find Minimum in Rotated Sorted Array II Suppose an array sorted in ascending order is rotated at som ...

  5. Java 异步 I/O

    Java 中的异步 I/O 简称 AIO, A 即 Asynchronous.AIO 在 JDK1.7 时引入,基于操作系统提供的异步 I/O 通信模型,封装了一些进行异步 I/O 操作的 API. ...

  6. Iceberg学习日记(1) 定位两个线上Iceberg查不到文件的问题

    前言 Iceberg是我们去年年底(2020)开始调研,目前上线了130多张表.主要用于流量日志清洗,数据报表,推荐特征基础数据.至今为也算是积累了一些使用及定位问题经验. 这篇文章会介绍两个线上Ic ...

  7. Understanding C++ Modules In C++20 (1)

    Compiling evironment: linux (ubuntu 16.04)+ gcc-10.2. The Post will clarify and discuss what modules ...

  8. ApacheCN PythonWeb 译文集 20211028 更新

    Django By Example 中文版 1 创建一个博客应用 2 为博客添加高级功能 3 扩展你的博客应用 4 创建一个社交网站 5 分享内容到你的网站 6 跟踪用户动作 7 构建在线商店 8 管 ...

  9. Swift数组

    数组的介绍 数组(Array)是一串有序的由相同类型元素构成的集合 数组中的集合元素是有序的,可以重复出现 Swift中的数组 swift数组类型是Array,是一个泛型集合 数组的初始化 数组分成: ...

  10. JScrollPane 自动跟进 自动到滚动到最底部

    感谢大佬:https://blog.csdn.net/csdn_lqr/article/details/51068423 注:以下方法为网上摘抄 1 . JTable( 放在JScrollPane中  ...