如何编写两数之和的算法代码
发表于:2025-11-12 作者:千家信息网编辑
千家信息网最后更新 2025年11月12日,这篇文章主要介绍"如何编写两数之和的算法代码",在日常操作中,相信很多人在如何编写两数之和的算法代码问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"如何编写两数之和的算法
千家信息网最后更新 2025年11月12日如何编写两数之和的算法代码
这篇文章主要介绍"如何编写两数之和的算法代码",在日常操作中,相信很多人在如何编写两数之和的算法代码问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"如何编写两数之和的算法代码"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
给定一个整数数组 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安全错误
数据库的锁怎样保障安全
网络安全区域dmz
数据库系统数据共享指的是
软件开发使用的电脑配置
软件开发培训班怎么选择
服务器系统一般装什么版本
2018三级网络技术资料
h5棋牌游戏软件开发
计算机用数据库管理系统
数据库and多个值
上海艺今互联网科技有限公司
区块链网络安全公司
天津手机软件开发语言
密码编码学与网络安全 在线
分散数据库同步技术
一个数据库多个实例多个用户
网络技术三级大题
天星餐饮软件开发
欧洲动漫产业的数据库
dede重装 数据库密码
如何在数据库中快速提取数据
数据库系统中表达式字段类型
php数据库端口修改
dell服务器r630
中科可控应用服务器
域名是不是必须要服务器
网络安全线路整改
服务器系统查看管理员密码
网络安全技术有限公司
密码编码学与网络安全 在线
浪潮整机柜服务器维修公司