LeetCode one Two Sum
LeetCode one Two Sum (JAVA)
简介:给定一个数组和目标值,寻找数组中符合求和条件的两个数.
问题详解:
给定一个数据类型为int的数组,一个数据类型为int的目标值target,要求是在数组中寻求两个数字,使得两个数求和的值等于给定的target,要求以数组返回符合条件的索引.
技巧:可以假设数组中没有重复元素,因为我们只返回一个符合条件的数组,所以数组中只需要一个符合要求的数字就可以了.
举例:
给定数组 nums={5,8,7,2,11},target= 10,
因为nums[1]+nums[3]=8+2=10,
所以返回[1,3].
注意:
1.数组下标不能重复
错解:nums[0]+nums[0]=5+5=10,
返回[0,0].
2.要考虑到没有符合的结果时的处理.
JAVA实现方法一:暴力遍历,两层循环,不推荐(第一次愚蠢实现)
public int[] twoSum(int[] nums, int target) {
for (int i = 0; i < nums.length; i++) {
for (int j = i + 1; j < nums.length; j++) {
if (nums[j] == target - nums[i]) {
return new int[] { i, j };
}
}
}
throw new IllegalArgumentException("No two sum solution");
}
学习之路:
官方实现一 : 双层遍历.
优点:
1.代码的简洁性.
2.用throw方法处理无结果.
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 i = 0; i < nums.length; i++) {//判断结果
int complement = target - nums[i];
if (map.containsKey(complement) && map.get(complement) != i) {
return new int[] { i, map.get(complement) };
}
}
throw new IllegalArgumentException("No two sum solution");
}
复杂度分析:
时间复杂度 :近似于O(n^2):双层遍历,方法执行了n*n次.
空间复杂度 :近似于 O(1):变量的定义为常数.
官方实现二 : 利用HashMap两次遍历
先存放数组数据,再判断Map数据.
优点:
1.利用Hash表通过空间交换时间的方法提高查找时间.
2.因为不需要两个重复的数字,所以不会与Map中键的特性冲突.
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 i = 0; i < nums.length; i++) {//判断结果
int complement = target - nums[i];
if (map.containsKey(complement) && map.get(complement) != i) {
return new int[] { i, map.get(complement) };
}
}
throw new IllegalArgumentException("No two sum solution");
}
复杂度分析:
时间复杂度 :近似于O(n):都是单层遍历,方法执行了n次.
空间复杂度 :近似于 O(n):一次遍历,变量定义了n次.
LeetCode官方实现三 : 利用HashMap两次遍历
在存放数据的过程中判断结果.
优点:
1.提高了代码的简洁性
public int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
int complement = target - nums[i];
if (map.containsKey(complement)) {//满足条件直接返回结果,不继续遍历存数据
return new int[] { map.get(complement), i };
}
map.put(nums[i], i);
}
throw new IllegalArgumentException("No two sum solution");
}
复杂度分析:
时间复杂度 :近似于O(n):一次遍历,方法执行了n次.
空间复杂度 :近似于 O(n):一次遍历,变量定义了n次.
随记:
length——数组的属性;
length()——String的方法;
size()——集合的方法;
put()——Map的添加方法 ;
add()——Collection的添加方法;
小白刷题之路,请多指教— — 要么大器晚成,要么石沉大海
LeetCode one Two Sum的更多相关文章
- Java for LeetCode 216 Combination Sum III
Find all possible combinations of k numbers that add up to a number n, given that only numbers from ...
- LeetCode 1 Two Sum 解题报告
LeetCode 1 Two Sum 解题报告 偶然间听见leetcode这个平台,这里面题量也不是很多200多题,打算平时有空在研究生期间就刷完,跟跟多的练习算法的人进行交流思想,一定的ACM算法积 ...
- [leetCode][013] Two Sum 2
题目: Given an array of integers that is already sorted in ascending order, find two numbers such that ...
- [LeetCode] #167# Two Sum II : 数组/二分查找/双指针
一. 题目 1. Two Sum II Given an array of integers that is already sorted in ascending order, find two n ...
- [LeetCode] #1# Two Sum : 数组/哈希表/二分查找/双指针
一. 题目 1. Two SumTotal Accepted: 241484 Total Submissions: 1005339 Difficulty: Easy Given an array of ...
- [array] leetcode - 40. Combination Sum II - Medium
leetcode - 40. Combination Sum II - Medium descrition Given a collection of candidate numbers (C) an ...
- [array] leetcode - 39. Combination Sum - Medium
leetcode - 39. Combination Sum - Medium descrition Given a set of candidate numbers (C) (without dup ...
- [leetcode]40. Combination Sum II组合之和之二
Given a collection of candidate numbers (candidates) and a target number (target), find all unique c ...
- [LeetCode] 437. Path Sum III_ Easy tag: DFS
You are given a binary tree in which each node contains an integer value. Find the number of paths t ...
随机推荐
- Nginx启动错误:error while loading shared libraries: libpcre.so.1
1 # /usr/local/nginx/sbin/nginx 2 /usr/local/nginx/sbin/nginx: error while loading shared libraries: ...
- Oracle 数据库分页查询与排序分页查询
一.分页查询 原始查询语句 SELECT * FROM NASLE_WFSHH 修改为分页查询语句,加上 ROWNUM 列.此处为查询第 1 页,每页 9 条数据 SELECT * FROM ( SE ...
- [转]Red Hat Linux相关产品iso镜像下载【百度云】
超强汇总!献上大佬链接:http://www.linuxfly.org/post/659/ 还有一些可用链接: 下面的直接复制到迅雷下载,链接是打不开的. RHEL 5.4 ISO下载http://r ...
- 09、 在QQ音乐中查找七里香这首歌的精彩评论
找到七里香这首歌的精彩评论 URL https://c.y.qq.com/base/fcgi-bin/fcg_global_comment_h5.fcg?g_tk=5381&l ...
- [Android] Android 常见第三方库汇总地址
Android 常见第三方库汇总地址 https://github.com/wasabeef/awesome-android-libraries List of Android Libraries T ...
- 【由浅入深理解java集合】(一)——集合框架 Collction、Map
本篇文章主要对java集合的框架进行介绍,使大家对java集合的整体框架有个了解.具体介绍了Collection接口,Map接口以及Collection接口的三个子接口Set,List,Queue. ...
- 关于公众平台接口不再支持HTTP方式调用的公告
为保证数据传输安全,提高业务安全性,公众平台将不再支持HTTP方式调用.避免影响正常使用中含有HTTP方式调用的服务,请开发者尽快调整,将现有通过HTTP方式调用的切换成HTTPS调用,平台将于201 ...
- JS数据结构库
lodash https://lodash.com/docs#now https://lodash.com/ A modern JavaScript utility library deliverin ...
- 二叉搜索树BST
//遍历 void print(int p){ if(!p) return; print(left[p]); printf("%d\n",a[p]); print(right[p] ...
- JS算法练习一
JS算法练习 1.随机生成一个五位以内的数,然后输出该数共有多少位,每位分别是什么? ①.数组添加元素的方式得到位数(数组长度)与值(数组元素) ①.数组添加元素的方式得到位数(数组长度)与值(数组元 ...