[LeetCode]1.Two Sum 两数之和(Java)
原题地址: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)的更多相关文章
- [LeetCode] 1. Two Sum 两数之和
Part 1. 题目描述 (easy) Given an array of integers, return indices of the two numbers such that they add ...
- [LeetCode]1.Two Sum 两数之和&&第一次刷题感想
---恢复内容开始--- 参考博客: https://www.cnblogs.com/grandyang/p/4130379.html https://blog.csdn.net/weixin_387 ...
- [LeetCode] 1.Two Sum 两数之和分析以及实现 (golang)
题目描述: /* Given an array of integers, return indices of the two numbers such that they add up to a sp ...
- 【LeetCode】Two Sum(两数之和)
这道题是LeetCode里的第1道题. 题目描述: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会 ...
- [leetcode]1. Two Sum两数之和
Given an array of integers, return indices of the two numbers such that they add up to a specific t ...
- 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 ...
- 【LeetCode】1. Two Sum 两数之和
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 个人公众号:负雪明烛 本文关键词:two sum, 两数之和,题解,leetcode, 力 ...
- Leetcode:0002(两数之和)
LeetCode:0002(两数之和) 题目描述:给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表.你可以假设除了数字 0 之外,这两 ...
- Leetcode(1)两数之和
Leetcode(1)两数之和 [题目表述]: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标.你可以假设每种输入只会对应一 ...
随机推荐
- Go的日志库go-logging
配置文件config.yaml log: prefix: '[MY-LOG] ' log-file: true stdout: 'DEBUG' file: 'DEBUG' config/config. ...
- 使用 Json Schema 定义 API
本文地址:使用 Json Schema 定义 API 前面我们介绍了 Json Schema 的基本内容,这篇文章我们结合 jsonschema2pojo 工具深入分析如何使用 Json Schema ...
- 《剑指offer》面试题60. n个骰子的点数
问题描述 把n个骰子扔在地上,所有骰子朝上一面的点数之和为s.输入n,打印出s的所有可能的值出现的概率. 你需要用一个浮点数数组返回答案,其中第 i 个元素代表这 n 个骰子所能掷出的点数集合中第 i ...
- nginx的fastcgi配置
首先参考了一份配置注释(来自"小刚的博客"): #运行用户 user www-data; #启动进程,通常设置成和cpu的数量相等 worker_processes 1; #全局错 ...
- vue3源码node的问题
下载vue3源码后,下载依赖时,node的版本需要在10.0.0以上,并且不同的vue3里面的插件的配置对版本依赖还不同,14.0.0以上的版本基本都不支持win7了, win7系统可以安装12.0. ...
- 加深对AQS原理的理解示例一:实现一个独占锁
/** *@Desc * 这个自定义的独占锁 只是一个简单的版本,非常粗糙,只为了加深对AQS原理理解.但还有一些列问题有待解决,比如锁的重入,锁不允许被其他线程中断等! *@Author zhang ...
- golang中的接口值
package main import ( "bytes" "fmt" "io" ) // 此处的w参数默认是一个空接口,当传递进来buf参 ...
- StringBuffer类(增删改查及长度可变原理)
1 package cn.itcast.p2.stringbuffer.demo; 2 3 public class StringBufferDemo { 4 5 public static void ...
- java-异常-异常捕捉及多catch情况(try-catch)
1 package p1.exception; 2 3 4 /* 5 * 异常处理的捕捉形式: 6 * 这是可以对异常进行针对性处理的方式. 7 * 8 * 具体格式是: 9 * try{ 10 * ...
- a 标签一些特殊用法
发邮件 <a href="mailto:youemail@mail.com?subject=邮件标题&body=邮件内容">告诉我们</a> 打电话 ...