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

  

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

  
      <李>给定一个不重复的无序数arr组和一个定值num李   <李>查找加勒比海盗中是否有两个数的和等于num李   <李>有则返回这两个数的下标(可能有多组,只用返回一组),没有则返回零李   
  

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

  

<>强实现思路:

  

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

  

<强>代码实现:

        公开课getTwoNumsSumEquals {   公共静态void main (String [] args) {   arr int []=new int [] {3、4、6、5、9 - 8};   int num=8;   int [] ret=getIndex (arr num);   系统。println(“两个数指数R:“+ ret [0] + " " + ret [1]);   }//找到这两个数的下标并返回(以长度为2的数组的形式返回)   私有静态int [] getIndex (int[]加勒比海盗,int num) {   int [] ret=new int [2];   Integer> HashMap<整数;,hashMap=new HashMap<的在();   int指数=0;//将每个数字和其下标放进地图中   (整数咕咕叫:arr) {   hashMap。把(咕咕叫,指数+ +);   }//遍历HashMap并判断   (Map.Entry<整数,Integer>条目:hashMap.entrySet ()) {   int value=https://www.yisu.com/zixun/entry.getKey ();   int subValue=num -价值;   如果(hashMap.containsKey (subValue)) {//找到啦!   ret [0]=entry.getValue ();   ret [1]=hashMap.get (subValue);   打破;   }   }   返回受潮湿腐烂;   }   }      

<强>总结

  

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。如果你想了解更多相关内容请查看下面相关链接
  

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