Java查找不重复无序数组中是否存在两个数字的和为某个值

作者:sdr_zd 时间:2023-08-22 16:44:40 

今天去某在线教育面试面试官让做的一道题,题目描述如下:

  1. 给定一个不重复的无序数组arr和一个定值num

  2. 查找arr中是否有两个数的和等于num

  3. 有则返回这两个数的下标(可能有多组, 只用返回一组), 没有则返回null

很多人一想可能就是两层for循环,我想了很久最后写了双重for循环…【这个代码太easy就不放了】然后面试官说知道哈希吗,由于哈希查找的时间复杂度是O(1),从哈希的角度去考虑,这中间还有一堆就不描述了,说一下怎么用哈希实现。

实现思路:

将数组中的所有的值放入HashMap的Key中,Value存放该值对应的下标,遍历这个HashMap,取得Key,计算如果可以和这个Key加起来的和为num的值,如果这个值存在,就直接返回这两个下标。遍历一次的时间复杂度为O(N),查找的时间复杂度是O(1),总体时间复杂度O(N)。

代码实现:


public class getTwoNumsSumEquals {
 public static void main(String[] args) {
   int[] arr = new int[]{3, 4, 6, 5, 9, 8};
   int num = 8;
   int[] ret = getIndex(arr, num);
   System.out.println("index of two numbers R:" + ret[0] + " " + ret[1]);
 }
 // 找到这两个数的下标并返回(以长度为2的数组的形式返回)
 private static int[] getIndex(int[] arr, int num) {
   int[] ret = new int[2];
   HashMap<Integer, Integer> hashMap = new HashMap<>();
   int index = 0;
   // 将每个数字和其下标放进map中
   for (Integer curr : arr) {
     hashMap.put(curr, index++);
   }
  // 遍历HashMap并判断
   for (Map.Entry<Integer, Integer> entry : hashMap.entrySet()) {
     int value = entry.getKey();
     int subValue = num - value;
     if(hashMap.containsKey(subValue)) {
       // 找到啦!
       ret[0] = entry.getValue();
       ret[1] = hashMap.get(subValue);
       break;
     }
   }
   return ret;
 }
}

来源:https://blog.csdn.net/sdr_zd/article/details/82904396

标签:java,查找,数组
0
投稿

猜你喜欢

  • C#事件标准命名规则及说明(包括用作事件类型的委托命名)

    2022-02-27 06:57:43
  • Android EasyBarrage实现轻量级弹幕效果

    2022-03-07 06:46:31
  • 详解Kotlin:forEach也能break和continue

    2022-05-03 01:24:10
  • Spring Cloud Gateway替代zuul作为API网关的方法

    2023-05-03 07:19:58
  • 详解SpringBoot的事务管理

    2022-01-15 13:39:26
  • SpringBoot和Swagger结合提高API开发效率

    2023-11-25 01:23:16
  • 全面解析Android中对EditText输入实现监听的方法

    2022-09-15 15:05:55
  • Java基础之finally语句与return语句详解

    2021-11-27 19:21:22
  • 基于C#解决库存扣减及订单创建时防止并发死锁的问题

    2023-03-16 20:59:53
  • Android实现界面跳转功能

    2022-05-07 21:51:32
  • C#接口INotifyPropertyChanged使用方法

    2021-11-22 13:33:53
  • 浅谈Java编程中string的理解与运用

    2021-05-31 22:15:44
  • C#使用GDI+实现生成验证码

    2023-04-10 10:42:44
  • ArrayList在for循环中使用remove方法移除元素方法介绍

    2022-11-20 03:50:18
  • C#中Razor模板引擎简单使用

    2022-01-21 10:04:13
  • C#禁止textbox复制、粘贴、剪切及鼠标右键的方法

    2022-08-21 09:13:40
  • springSecurity之AuthenticationProvider用法解析

    2022-09-07 20:55:01
  • Java的运算符和程序逻辑控制你了解吗

    2023-01-19 10:01:59
  • springboot中.yml文件参数的读取方式

    2021-06-20 00:57:51
  • C# Ini文件操作实例

    2022-12-31 00:37:45
  • asp之家 软件编程 m.aspxhome.com