1 题目

2 思路与代码

  • 思路一:暴力法(两层For循环)

    • 时间复杂度:O(n^2)

      • 对于每个元素,我们试图通过遍历数组的其余部分来寻找它所对应的目标元素,这将耗费 O(n) 的时间。因此时间复杂度为 O(n^2)。
    • 空间复杂度:O(1)
    • 原理:遍历每个元素 xx,并查找是否存在一个值与 target - x相等的目标元素
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* twoSum(int* nums, int numsSize, int target){
static int result[2]= {0};
for(int i=0;i<numsSize;i=i++){
for(int j=i+1;j<numsSize;j=j++){ //【trick】“int j=i+1;”而非“int j=0”
if(nums[i]+nums[j]==target){
result[0] = i;
result[1] = j;
return result;
}
}
}
return result;
}
  • 思路二:两遍哈希表

    • 时间复杂度:O(n)

      • 把包含有 n 个元素的列表遍历两次。由于哈希表将查找时间缩短到 O(1) ,所以时间复杂度为O(n)
    • 空间复杂度:O(n)
      • 所需的额外空间取决于哈希表中存储的元素数量,该表中存储了 n 个元素
class Solution {
/*
思路:两遍哈希表
推荐文献:
https://baijiahao.baidu.com/s?id=1628609734622761569&wfr=spider&for=pc
*/
public int[] twoSum(int[] nums, int target) {
HashMap<Integer, Integer> map = new HashMap();
for(int i=0;i<nums.length;i++){
map.put(nums[i],i);
}
for(int j=0;j<nums.length;j++){
int tmp = target - nums[j];
if(map.containsKey(tmp) && map.get(tmp)!=j){
return new int [] { j, map.get(tmp) };
}
}
throw new IllegalArgumentException("No two sum solution!");
}
}
  • 思路三:一遍哈希表

    • 时间复杂度:O(n)

      • 只遍历了包含有n 个元素的列表一次。在表中进行的每次查找只花费 O(1) 的时间
    • 空间复杂度:O(n)
      • 所需的额外空间取决于哈希表中存储的元素数量,该表最多需要存储 n 个元素。
    • 原理:通过思路二,可以推得:上述过程可以一次完成。在进行迭代并将元素插入到表中的同时,我们还会回过头来检查表中是否已经存在当前元素所对应的目标元素。如果它存在,那我们已经找到了对应解,并立即将其返回。
class Solution {//一次Hash查表
public int[] twoSum(int[] nums, int target) {
HashMap<Integer, Integer> map = new HashMap();
for(int i=0;i<nums.length;i++){
int tmp = target - nums[i];
if(map.containsKey(tmp) && map.get(tmp)!=i){
return new int [] { i, map.get(tmp) };
} else {
map.put(nums[i],i);
}
}
// for(int j=0;j<nums.length;j++){
// int tmp = target - nums[j];
// if(map.containsKey(tmp) && map.get(tmp)!=j){
// return new int [] { j, map.get(tmp) };
// }
// }
throw new IllegalArgumentException("No two sum solution!");
}
}

3 参考文献

4 博文遗留问题

  • (数据结构/Java中)HashMap/哈希表 查询的原理与实现?

[Java]1.两数之和 - LeetCode的更多相关文章

  1. Java实现两数之和等于二十

    找出数组中两个数字之和为20的两个数 代码实现 public static void main(String[] args) { // TODO Auto-generated method stub ...

  2. 1. 两数之和 LeetCode

    给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用. 示例: 给定 nums = [, , , ], target = 因为 n ...

  3. 两数之和 [ leetcode ]

    原题地址:https://leetcode-cn.com/articles/two-sum/ 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个输入只对应一种答案,且同样的元 ...

  4. 两数之和LeetCode

    给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中同样的元 ...

  5. 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 ...

  6. leetCode:twoSum 两数之和 【JAVA实现】

    LeetCode 两数之和 给定一个整数数组,返回两个数字的索引,使它们相加到特定目标. 您可以假设每个输入只有一个解决方案,并且您可能不会两次使用相同的元素. 更多文章查看个人博客 个人博客地址:t ...

  7. Java实现 LeetCode 653 两数之和 IV - 输入 BST(递归,找差值)

    653. 两数之和 IV - 输入 BST 给定一个二叉搜索树和一个目标结果,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true. 案例 1: 输入: 5 / \ 3 6 / ...

  8. Java实现 LeetCode 1两数之和

    1. 两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这 ...

  9. Java实现 LeetCode 167 两数之和 II - 输入有序数组

    167. 两数之和 II - 输入有序数组 给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数. 函数应该返回这两个下标值 index1 和 index2,其中 index1 必 ...

随机推荐

  1. es相关

    1.es在数据量很大的情况下(数十亿级别)如何提高查询性能啊? 2.es生产集群的部署架构是什么?每个索引的数据量大概有多少?每个索引大概有多少个分片? 3.es的分布式架构原理能说一下么(es是如何 ...

  2. JavaScript 页面渲染

    1. 从输入url到得到html的详细过程 1.1 加载资源的形式      输入 URL 或跳转页面 加载 html 1.2 加载一个资源的过程 浏览器根据DNS服务器得到域名的IP地址 向这个IP ...

  3. django安装好之后,django-admin仍然不能使用的问题

    我使用的是python3,python3不能找到django的正确位置.需要下面这样才能正确建立mysite python3 /usr/lib/python2./site-packages/djang ...

  4. Consul概述

    环境安装 1.下载consul 官网https://www.consul.io/downloads.html下载对应版本的consul:本文以Windows-64版本为例 2.配置到系统环境变量 C: ...

  5. json读写

    import json l = [,,}] print(json.dumps(l)) d = dict(b=None,a=,c='abc') print(json.dumps(d, separator ...

  6. SIGAI机器学习第七集 k近邻算法

    讲授K近邻思想,kNN的预测算法,距离函数,距离度量学习,kNN算法的实际应用. KNN是有监督机器学习算法,K-means是一个聚类算法,都依赖于距离函数.没有训练过程,只有预测过程. 大纲: k近 ...

  7. 021_STM32程序移植之_ESP8266连接onenet

    本次教程是使用STM32C8T6通过ESP8266-12F模块将数据传输到ONENET云端去,并且云端能够下发命令给单片机来实现云端控制.本次实验硬件设备:STM32C8T6最小系统,ESP8266- ...

  8. Linq to JSON/Json.NET

    Can I LINQ a JSON? http://stackoverflow.com/questions/18758361/can-i-linq-a-json Json.NET https://js ...

  9. Django—Ajax

    Ajax-get url url(r'^ajax_add/', views.ajax_add), url(r'^ajax_demo1/', views.ajax_demo1), 视图 def ajax ...

  10. linux中fork--子进程是从哪里开始运行

    转自  http://blog.csdn.net/koches/article/details/7787468 fork调用的一个奇妙之处就是它仅仅被调用一次,却能够返回两次,它可能有三种不同的返回值 ...