leetcode_两数之和
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/two-sum
方法一:暴力枚举
遍历数组中的的每一个x,寻找是否存在target-x。
由于每一个位于x之前的元素都与x匹配过,因此每次遍历只需从x之后的元素开始寻找target-x。
代码:
public class Test_1_1 { public static void main(String[] args) { int nums[]=new int[]{4,7,1,9,6}; int target=8; int twoSum[]= Test_1_1.twoSum(nums,target); //测试 for (int i:twoSum){ System.out.println(i); } } public static int[] twoSum(int[] nums, int target) { //定义返回的索引数组 int twoindex[]=new int[2]; //遍历前length-1个元素,寻找后面是否有与之匹配的元素 for (int i=0;i<nums.length-1;i++){ //只需从nums[i]之后寻找 for (int j=i+1;j<nums.length;j++){ //若匹配到则存储索引下标 if (nums[i]+nums[j]==target){ twoindex[0]=i; twoindex[1]=j; } } } return twoindex; } }
运行结果:
方法二:哈希表查找
遍历数组中每一个x元素,先在哈希表中查找是否存在key值为target-x,如果没有,则将x作为key值,索引作为value存入哈希表中,方便后续查找;如果有,则取出相应的value值。
代码:
public class Test_1_2 { public static void main(String[] args) { int nums[]=new int[]{8,0,9,1,8,7}; int target=10; int a[]=Test_1_2.twoSum(nums,target); //测试 for (int i:a){ System.out.println(i); } } public static int[] twoSum(int[] nums, int target) { int num[]=new int[2]; //定义哈希表 Map<Integer,Integer> map=new HashMap<>(); //遍历每一个x元素 for (int i=0;i<nums.length;i++){ int j=target-nums[i]; //若在map中找到与x匹配的值,则取出索引 if (map.containsKey(j)){ num[1]=i; num[0]=map.get(j); } //没有则将x作为key值存入map中 else { map.put(nums[i],i ); } } return num; } }
运行结果:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)