如何编写两数之和的算法代码
发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,这篇文章主要介绍"如何编写两数之和的算法代码",在日常操作中,相信很多人在如何编写两数之和的算法代码问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"如何编写两数之和的算法
千家信息网最后更新 2025年02月02日如何编写两数之和的算法代码
这篇文章主要介绍"如何编写两数之和的算法代码",在日常操作中,相信很多人在如何编写两数之和的算法代码问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"如何编写两数之和的算法代码"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
给定一个整数数组 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安全错误
数据库的锁怎样保障安全
杭州软件开发公司收费标准
三级数据库技术软件安装
网络安全登记保护机制内容
软件开发成功的案例分析
员工管理系统数据库职务表
cs1.6丧尸服务器
方舟怎么把人踢出服务器
查看网站web服务器
市南区管理软件开发服务公司
爱丁堡网络安全博士
计算机网络技术发展与方向
WSP下载软件开发
什么给网络安全带来最大的问题
计算机中的数据库是什么意思
电网网络安全培训新闻稿
数据库报错sum标识符无效
代理服务器显示ip怎么办
云汇客网络技术是真的吗
石家庄佳君网络技术有限公司
国家推进网络安全建设方案
软件开发标的
数据库的数据存到数组
网络技术A类
网络安全志愿服务鸦鸿桥
网络安全风险防范方法
重保时期网络安全保障方案
大话西游2服务器怎么取名字
放网络安全宣传的手抄报
电力网络安全讨论
网络技术都包括啥