如何编写两数之和的算法代码
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要介绍"如何编写两数之和的算法代码",在日常操作中,相信很多人在如何编写两数之和的算法代码问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"如何编写两数之和的算法
千家信息网最后更新 2026年11月03日如何编写两数之和的算法代码
这篇文章主要介绍"如何编写两数之和的算法代码",在日常操作中,相信很多人在如何编写两数之和的算法代码问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"如何编写两数之和的算法代码"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。
示例:
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
package com.lau.javabase;import org.junit.Test;import java.time.Duration;import java.time.Instant;import java.util.Arrays;import java.util.HashMap;import java.util.Map;import java.util.Objects;/** * 时间复杂度排序: * O(1)--常数时间 * O(logN)--对数时间 * O(N)--线性时间 * O(N*N)--2次指数时间 * O(N*N*N)--3次指数时间 * *给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。 * * 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 * * 你可以按任意顺序返回答案。 * * 来源:力扣(LeetCode) * 链接:https://leetcode-cn.com/problems/two-sum * * 测试用例: * 输入:nums = [2,7,11,15], target = 9 * 输出:[0,1] * 解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。 * * 来源:力扣(LeetCode) * 链接:https://leetcode-cn.com/problems/two-sum * 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 * */public class TwoSumTest { @Test public void test(){ int[] array = {1,5,10,9,12}; Instant start = Instant.now(); System.out.println("---------1--------"); int[]resArray = findTwoIntBySum(array, 17); Instant end = Instant.now(); long timeElapsed = Duration.between(start, end).toNanos(); // 单位为毫秒 System.out.println("程序1耗时:" + timeElapsed); Arrays.stream(resArray).forEach(System.out :: println); start = Instant.now(); System.out.println("---------2--------"); int[]resArray2 = findTwoIntBySum2(array, 17); end = Instant.now(); timeElapsed = Duration.between(start, end).toNanos(); // 单位为毫秒 System.out.println("程序2耗时:" + timeElapsed); Arrays.stream(resArray2).forEach(System.out :: println); start = Instant.now(); System.out.println("---------3--------"); int[]resArray3 = findTwoIntBySum3(array, 17); end = Instant.now(); timeElapsed = Duration.between(start, end).toNanos(); // 单位为毫秒 System.out.println("程序3耗时:" + timeElapsed); Arrays.stream(resArray3).forEach(System.out :: println); start = Instant.now(); System.out.println("---------4--------"); int[]resArray4 = findTwoIntBySum4(array, 17); end = Instant.now(); timeElapsed = Duration.between(start, end).toNanos(); // 单位为毫秒 System.out.println("程序4耗时:" + timeElapsed); Arrays.stream(resArray4).forEach(System.out :: println); } /** * @Description:解法一,两层遍历 * @param array * @param target * @return */ private int[] findTwoIntBySum(int[] array, int target){ int[] resArray = null; for(int i = 0; i < array.length - 1; i++){ for(int j = i + 1; j < array.length; j++){ if(target == array[i] + array[j]){ resArray = new int[]{i, j}; return resArray; } } } return resArray; } /** * @Description:解法二,依托HashMap,将数组值作为K,索引作为V存入Map * @param array * @param target * @return */ private int[] findTwoIntBySum2(int[] array, int target){ int[] resArray = null; //建立HashMap,存储 K存值,V存索引 Map midMap = new HashMap<>();// Arrays.stream(array).forEach(s -> ); for(int i = 0; i < array.length; i++){ midMap.put(array[i], i); } for(int i = 0; i < array.length; i++){ if(Objects.nonNull(midMap.get(target - array[i]))){ resArray = new int[]{i, midMap.get(target - array[i])}; return resArray; } } return resArray; } /** * @Description:解法三,两层遍历(解法一的变种) * @param array * @param target * @return */ private int[] findTwoIntBySum3(int[] array, int target){ int[] resArray = null; for(int i = 0; i < array.length - 1; i++){ for(int j = i + 1; j < array.length; j++){ if(target - array[i] == array[j]){ resArray = new int[]{i, j}; return resArray; } } } return resArray; } /** * @Description:解法四,依托HashMap,一次遍历即可完成 * @param array * @param target * @return */ private int[] findTwoIntBySum4(int[] array, int target){ int[] resArray = null; //建立HashMap,存储 K存值,V存索引 Map midMap = new HashMap<>();// Arrays.stream(array).forEach(s -> ); for(int i = 0; i < array.length; i++){ if(midMap.containsKey(target - array[i])){ resArray = new int[]{midMap.get(target - array[i]), i}; return resArray; } midMap.put(array[i], i); } return resArray; }} 到此,关于"如何编写两数之和的算法代码"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
数组
整数
时间
解法
之和
代码
算法
单位
目标
目标值
程序
学习
答案
索引
输入
下标
两个
指数
更多
来源
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技公司简介
中国互联网科技股
新华互联网科技学院
互联网巨头反垄断金融科技
腾讯阿里互联网科技
互联网金融 科技
互联网科技视频
苏州大垚互联网科技
互联网养老 桔豆科技
重庆科技学院互联网
以后互联网后是啥科技
互联网科技有哪些公司
武汉健翔互联网络科技有限公司
广州市恰铎互联网科技有限公司
高科技互联网发展前景如何
科技互联网的核心竞争力
江苏互联网科技小贷
上海同邻互联网科技有限公司规模
数字互联网科技有限公司
互联网领先科技成果宣传视频
科技互联网项目
互联网下的科技发展
腾讯阿里互联网科技
安控科技rtu产品工业互联网
互联网软件和科技
翼展科技 首家互联网医院
广州百诚互联网科技有限公司官网
郑州欣桑互联网科技有限公司
科技信息时代互联网发展
互联网高科技绘画