给定一个整数数组 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;
}
}

运行结果:

最新文章

  1. ssh(sturts2_spring_hibernate) 框架搭建之JPA代替hibernate
  2. View的drawRect方法
  3. Ioc注解
  4. mysql 配置主从
  5. 开箱即用 - Memcache
  6. Alyona and a tree
  7. lesson - 9 课程笔记
  8. .NET Core GC 的设计
  9. ggplot2 作图
  10. Python关键点笔记之使用 pyenv 管理多个 Python 版本依赖环境
  11. Kubelet bootstrap 流程
  12. 历时25天,我的博客(www.ityouknow.com)终于又活了过来
  13. M2事后总结
  14. web.xml中 /和/*的区别
  15. 最简单的uwsgi+nginx配置多个django站点
  16. 9.json和jsonpath
  17. idea @Override is not allowed when implementing interface method
  18. 主成分分析PCA
  19. 09 grep、正则表达式和sed
  20. [Python] 计算dataframe某一文本维度的平均长度

热门文章

  1. 聊聊你对AQS的理解
  2. ORACLE SQL*PLUS 命令大全
  3. VS Code nodejs智能补全typings
  4. netty系列之:EventLoop,EventLoopGroup和netty的默认实现
  5. Centos8 下部署 ASP.net Core 程序
  6. centos7 安装 nginx-1.18.0 并设置开机自启动
  7. 您的请求在Web服务器中没有找到对应的站点”这是什么原因?出现这个界面说明域名解析已经正确并生效,这是由于域名没有绑定好,
  8. 微信小程序实现简单的2048
  9. CSS学习Day01
  10. Spring系列25:Spring AOP 切点详解