[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,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标.你可以假设每种输入只会对应一 ...
随机推荐
- [Win32] UAC用户账户控制 (提权)
最近写程序时遇到一个问题,就是当一个程序需要管理员权限才能正常运行该怎么办? 通过查阅多方资料,我总结出来几个比较实用的办法(每种办法实现方法不同,同时功能上也有一些小小的差异) 方法一(批处理脚本) ...
- Echart可视化学习(一)
文档的源代码地址,需要的下载就可以了(访问密码:7567) https://url56.ctfile.com/f/34653256-527823386-04154f 正文: 创建需要的目录结构及文件 ...
- Android官方文档翻译 二 1.Building Your First App
Building Your First App 创建你的第一个App项目 Dependencies and prerequisites 依赖关系和先决条件 * Android SDK * ADT Pl ...
- 【pwn】V&N2020 公开赛 simpleHeap
[pwn]V&N2020 公开赛 simpleHeap 1.静态分析 首先libc版本是ubuntu16的2.23版本,可以去buu的资源处下载 然后checksec一下,保护全开 拖入IDA ...
- 【刷题-LeetCode】179 Largest Number
Largest Number Given a list of non negative integers, arrange them such that they form the largest n ...
- 【视频解码性能对比】opencv + cuvid + gpu vs. ffmpeg + cpu
视频大小:1168856 字节画面尺寸:480*848帧数:275opencv + cuvid + tesla P4, 解码性能:1426.84 fps ffmpeg 4.0 API + [Intel ...
- 【失败经验分享】android下使用支持opencl的cv::dft()
1.使用了UMat,但是并未使用GPU计算 cv::dft()函数的定义是: void cv::dft( InputArray _src0, OutputArray _dst, int flags, ...
- 【记录一个问题】libtask无法在android下编译通过
源码来自:https://github.com/msteinert/libtask 首先是asm.S无法编译通过. 其次,编译context.c出现这些错误: .//context.c:124:19: ...
- azure 控制台小工具
这个控制台往往被忽略.
- Cesium中文网——如何开发一款地图下载工具[一]
Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ Cesium中文网的朋友们的其中一个主题是:自己独立开发一款地图 ...