当前位置: 首页 > 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));}}}

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

http://www.xdnf.cn/news/582661.html

相关文章:

  • MySQL的相关操作
  • RTC技术
  • 第六部分:阶段项目 5:构建 NestJS RESTful API 服务器
  • STM32+rt-thread使用MQTT协议连接腾讯物联网平台
  • 旧物回收小程序:让闲置焕发光彩,为生活增添价值
  • spring boot启动报错:2002 - Can‘t connect to server on ‘192.168.10.212‘ (10061)
  • 响应式架构下的调试挑战:WebDebugX 如何帮助前端稳住场面?
  • 优化 CRM 架构,解锁企业竞争力密码
  • 解决:VMware 虚拟机 Ubuntu 系统共享文件夹无法访问问题
  • 将 Docker 镜像推送到 GitLab Container Registry 的完整步骤
  • C++初阶-list的使用1
  • JAVA8怎么使用9的List.of
  • 数据结构与算法-线性表-双向链表(Double Linked List)
  • Excalidraw云端协作实战:如何用智能绘图打破地理限制?深度解析来了!
  • Chrome 缓存文件路径
  • 50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | Blurry Loading (毛玻璃加载)
  • 二叉数的统一迭代法
  • 程序代码篇---Pytorch实现LATM+APF轨迹预测
  • 杰发科技AC7801——PWM获取固定脉冲个数
  • OpenAI 推出 Codex —— ChatGPT 内的“软件工程智能体”
  • 2025年- H42-Lc150 --146. LRU缓存(哈希表,双链表)需二刷--Java版
  • 先更新数据库,再删除缓存的cache aside策略
  • 6.DevOps体系之Jenkins
  • 深入掌握Node.js HTTP模块:从开始到放弃
  • JS实现直接下载PDF文件
  • 动手学深度学习12.6. 多GPU的简洁实现-笔记练习(PyTorch)
  • OpenCV图像平移示例
  • Linux笔记---信号(下)
  • RabbitMQ可靠传输——持久性、发送方确认
  • LangFlow可视化Agent编排