当前位置: 首页 > news >正文

常见算法题目1 - 给定一个整数数组和一个目标值,找出数组中两个数之和等于目标值的数组下标组合

算法题目1 - 给定一个整数数组和一个目标值,找出数组中两个数之和等于目标值的数组下标组合

1. 问题描述

给定一个整数数组nums和一个目标值target,找出数组中两个数之和等于目标值的数组下标组合。
例如:

int[] nums = {2, 6, 2, 4, 7};
int target = 8;
输出:
[0, 1]
[1, 2]

以下根据效率分享两种搜索算法。

2. 算法解决

2.1 暴力循环法

通过两层循环暴力枚举搜索,代码如下:

 /*** 题目:* 给定一个整数数组和一个目标值,找出数组中两个数之和等于目标值的索引* 暴力循环版 时间复杂度 O(n^2)* @param nums* @param target* @return*/private static List<int[]> twoSum1(int[] nums, int target) {List<int[]> result = new ArrayList<>();for (int i = 0;i < nums.length; i++) {for (int j = i + 1;j < nums.length; j++) {if (nums[i] + nums[j] == target) {result.add(new int[]{i, j});}}}return result;}
2.2 HashMap单层循环法

在单层循环中,借助map存储每一步循环的值及其数组索引下标,查找时直接检索map中是否包含对应元素,有的话直接获取索引下标,返回结果。相关代码如下:

  /*** 题目* 给定一个整数数组和一个目标值,找出数组中两个数之和等于目标值的索引* HashMap单层循环 时间复杂度 O(n)* @param nums* @param target* @return*/private static List<int[]> twoSum2(int[] nums, int target) {List<int[]> result = new ArrayList<>();// key为数值 value为数值对应的下标Map<Integer, List<Integer>> map = new HashMap<>();for (int i = 0; i < nums.length; i++) {// 差值int subNum = target - nums[i];// 如果map中有对应匹配值 则记录结果if (map.containsKey(subNum)) {for (Integer index : map.get(subNum)) {result.add(new int[]{index, i});}}// 记录当前循环值map.computeIfAbsent(nums[i], k -> new ArrayList<>()).add(i);}return result;}

3. 测试

调用测试:

public class TwoSumTest {public static void main(String[] args) {int[] nums = {2, 6, 2, 4, 7};int target = 8;List<int[]> list1 = twoSum1(nums, target);System.out.println("暴力循环结果:");for (int[] items : list1) {System.out.println(Arrays.toString(items));}System.out.println("-----------------------------");List<int[]> list2 = twoSum2(nums, target);System.out.println("HashMap单层循环结果:");for (int[] items : list2) {System.out.println(Arrays.toString(items));}}}

打印结果:
在这里插入图片描述
可见,输出结果一致

相关文章:

  • 【424. 替换后的最长重复字符】
  • linux字符模式关闭光标
  • 第34节:迁移学习中的特征提取方法
  • 九、日志分析和系统故障排查
  • 【Python3教程】Python3 文件(File)方法详解
  • 痉挛性斜颈护理指南:多维度守护颈部健康
  • 自动化测试报告工具
  • 课外知识:Python方法绑定机制与装饰器传参详解 与 实战
  • 各个网络协议的依赖关系
  • Labview使用报表工具
  • 谷歌开源医疗领域AI语言模型速递:medgemma-27b-text-it
  • 深入剖析 Doris 倒排索引(上):原理与应用全解析​
  • 【C/C++】深入解析Linux下C/C++内存管理全攻略(纲要)
  • 在政务中使用仙盟创梦工具维护曲靖市麒麟公安分局————仙盟创梦IDE
  • JVM常量池(class文件常量池,运行时常量池,字符串常量池)
  • 互联网大厂Java求职面试:AI大模型推理优化与实时数据处理架构
  • CRichEditCtrl 控件实现日志输出
  • 从零基础到最佳实践:Vue.js 系列(7/10):《常用内置 API 与插件》
  • 基于RFSOC49DR-16收16发 PCIE4.0 X8 射频采集卡
  • AI相关的笔记
  • 销售网站是什么/友链对网站seo有帮助吗
  • 做网站还有意义吗/湖南网站推广优化
  • 建站模板推荐/文件关键词搜索工具
  • 什么网站可以接室内设计做/韩国今日特大新闻
  • 设置网站开场动画/中国十大网站
  • dedecms做网站视频/百度搜索关键词数据