Java查找不重复无序数组中是否存在两个数字的和为某个值
作者:sdr_zd 时间:2023-08-22 16:44:40
今天去某在线教育面试面试官让做的一道题,题目描述如下:
给定一个不重复的无序数组arr和一个定值num
查找arr中是否有两个数的和等于num
有则返回这两个数的下标(可能有多组, 只用返回一组), 没有则返回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