力扣:1.两数之和(O(n)复杂度)

1. 两数之和 - 力扣(LeetCode)1. 两数之和 - 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。你可以按任意顺序返回答案。 示例 1:输入:nums = 2,7,11,15, target = 9输出:0,1解释:因为 nums0 + nums1 == 9 ,返回 0, 1 。示例 2:输入:nums = 3,2,4, target = 6输出:1,2示例 3:输入:nums = 3,3, target = 6输出:0,1 提示: * 2 <= nums.length <= 104 * -109 <= numsi <= 109 * -109 <= target <= 109 * 只会存在一个有效答案 进阶:你可以想出一个时间复杂度小于 O(n2) 的算法吗?https://leetcode.cn/problems/two-sum/description/

思路:

把这个数组想象成一群人,其中只能有2个有缘的人结婚 。建一个空的hash表,然后遍历数组,在hash表中找出另一个有缘人。找的过程中,如果另一个人不是有缘人(**另一个有缘人****target-numsi**不在hash表)就把该数添加到hash表,重复此过程,直到找到有缘人。

时间复杂度为O(n),最坏的情况也仅仅需要遍历数组一次

java 复制代码
class Solution {
    public int[] twoSum(int[] nums, int target) {
Map<Integer,Integer>storeNums=new HashMap<>();
int[] result=new int[2];
for(int i=0; i<nums.length; i++){
int another=target-nums[i];
Integer anotherIndex=storeNums.get(another);

if(anotherIndex!=null){
    result[0]=anotherIndex;
    result[1]=i;
    break;
}else storeNums.put(nums[i], i);
}

return result;

    }
}
相关推荐
码流子7 小时前
高速公路安全监测实践:碰撞监测预警+物联网底座,从感知到处置的闭环
大数据·人工智能·物联网·算法·架构
another heaven7 小时前
【算法/C++ MD5算法能否逆解码?原理、C++实现与同类哈希算法对比】
c++·算法·哈希算法
wzdark7 小时前
从算法设计模式看编程思维的抽象能力4
算法
2601_962218617 小时前
万象生鲜系统称重自动多退少补算法解决生鲜非标品痛点
大数据·数据库·人工智能·python·算法
mikuyyds8 小时前
geo-toolbox 水文插件算法解析:从 Muskingum 到 Muskingum-Cunge
算法·rust·gis
Omics Pro8 小时前
斯坦福Nature+Science|广义虚拟细胞基础大模型
数据库·人工智能·算法·机器学习·自然语言处理
代数狂人8 小时前
机器学习数学基础──从零开始 导读
人工智能·算法
CoderYanger9 小时前
A.每日一题:835. 图像重叠
java·开发语言·程序人生·leetcode·面试·职场和发展·学习方法
圣保罗的大教堂9 小时前
leetcode 3524. 求出数组的 X 值 I 中等
leetcode
Zane19949 小时前
暴力字符串匹配失配就要把文本指针往回拉,KMP凭什么能让它一直往前走
算法