本文使用两种算法来实现,分别是二分查找法和插值查找法,发现插值查找法更好,更快地找到需要的数据。
代码如下:

package com.moson.search;import java.util.Arrays;/*** 需求:* 在一个递增的数组里面,找出任意两个数的和等于100,编写程序输出这些数对,可以假设数组中不存在重复元素* @author moxingjian* @version 1.0* @date 10/22/19 9:56 PM*/
public class SearchSum {public static void main(String[] args) {int[] array = new  int[100];for (int i = 0; i < 100; i++) {array[i] = i + 1;}System.out.println(Arrays.toString(array));if (array.length == 0) {System.out.println("数组为空");} else {if (array[0] + array[array.length - 1] < 100) {System.out.println("该数组的值不正确,不能相加小于100");} else {for (int i = 0; i < array.length; i++) {int value = array[i];// 定义呀寻找的值int findValue = 100 - value;// 二分查找法
//                    int index = binarySearch(array, 0, array.length - 1, findValue);// 插值查找法,插值查找法查找速度更快int index = insertValueSearch(array, 0, array.length - 1, findValue);if (index != -1) {System.out.printf("找到数对:%d + %d = 100\n", value, findValue);} else {System.out.printf("找不到需要找的值:%d\n", findValue);}}}}}/*** 二分查找法* @param array* @param left* @param right* @param findValue* @return*/private static int binarySearch(int[] array, int left, int right, int findValue) {System.out.println("调用二分查找法");// 设置退出条件if (left > right) {return - 1;}// 中轴值int mid = (left + right) / 2;int midValue = array[mid];// 向左遍历if (findValue < midValue) {return binarySearch(array, left, mid -1, findValue);} else if  (findValue > midValue  ) { // 向右递归return binarySearch(array, mid + 1, right, findValue);} else {return mid;}}/*** 插值查找法* @param array* @param left* @param right* @param findValue* @return*/private static int insertValueSearch(int[] array, int left, int right, int findValue) {System.out.println("调用插值查找法");// 设置退出条件if (left > right || findValue < array[left] || findValue > array[right]) {return - 1;}// 获取自适应的中位值int mid = left + (right - left) * (findValue - array[left]) / (array[right] - array[left]);int midValue = array[mid];// 向左递归if (findValue < midValue) {return binarySearch(array, left, mid - 1, findValue);} else if  (findValue > midValue  ) {   // 向右递归return binarySearch(array, mid + 1, right, findValue);} else {return mid;}}}

Java面试题:在一个递增的数组里面,找出任意两个数的和等于100,编写程序输出这些数对,可以假设数组中不存在重复元素相关推荐

  1. 数组两个整数相加 c语言,作业帮:给定一个整数数组,找出其中两个数相加等于目标值(去重set)...

    题目描述 给定一个整数数组,找出其中两个数相加等于目标值 输入 [1,3,5,7,9,11] 10 输出 1,9 3,7 代码: import java.util.HashMap; import ja ...

  2. 作业帮:给定一个整数数组,找出其中两个数相加等于目标值(去重set)

    题目描述 给定一个整数数组,找出其中两个数相加等于目标值输入 [1,3,5,7,9,11] 10输出 1,9 3,7 代码: import java.util.HashMap; import java ...

  3. Java编写程序输出一个笑脸_给定一个数组,输出笑脸的个数。

    笑脸组成规则: -笑脸必须包含眼睛.用":"或";"表示. -笑脸可以有鼻子,也可以没有.用"-"或"~"表示. -笑脸 ...

  4. leetcode:java.T018_4Sum---给定一个整数数组,找出a + b + c + d = target的唯一解,不能有重复元素组

    <span style="color:#ff4635">敬请关注博客,后期不断更新优质博文,谢谢</span> package leetcode.T018_ ...

  5. 一个数组中,除两个元素其余都出现了两次,找出这两个元素

    为什么80%的码农都做不了架构师?>>>    本文为转载,原文地址是:http://blog.csdn.net/morewindows/article/details/821400 ...

  6. 【LeetCode 剑指offer刷题】数组题2:57 有序数组中和为s的两个数(167 Two Sum II - Input array is sorted)...

    [LeetCode & 剑指offer 刷题笔记]目录(持续更新中...) 57 有序数组中和为s的两个数 题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是 ...

  7. java文件出现字符串_找出三个文本文件中都出现的字符串,并输出到一个文本文件(菜鸟求救)...

    编写java程序 找出三个文本文件中都出现的字符串,并输出到一个文本文件 下面是三个文本文件,找出其中相同的字符串(用数组的方法) 第一个文件: EEF1A1 GAPDH LOC643334 SLC3 ...

  8. 每天一道LeetCode-----有序数组循环右移n位后,寻找最小值,数组中可能包含重复元素

    Find Minimum in Rotated Sorted Array II 原题链接Find Minimum in Rotated Sorted Array II 一个有序数组循环右移n位,找到右 ...

  9. 算法(17)定义一个整数数组,找出连续3个元素之和是最大的,并输出这三个元素。

    写在前面: 我是「扬帆向海」,这个昵称来源于我的名字以及女朋友的名字.我热爱技术.热爱开源.热爱编程.技术是开源的.知识是共享的. 这博客是对自己学习的一点点总结及记录,如果您对 Java.算法 感兴 ...

最新文章

  1. java中hashCode()在Map中的作用
  2. ASP.NET 5 and .NET Core RC 准备投入使用
  3. GPU和显卡是什么关系?GPU会取代CPU吗?GPU和显卡的区别是什么?
  4. 记录每个用户的操作记录(命令)
  5. Python3 字典 copy()方法
  6. mysql repos_mysql yum源安装
  7. Html中Select的增删改查排序,和jQuery中的常用功能
  8. 外贸注意:出口这些新兴市场国家政策有变化
  9. Windows映射网络驱动器
  10. python读取lmdb文件_LMDB 的 Python 接口使用方法
  11. 一篇博文搞定英文常见单词后缀(完全版)
  12. 知名网络漫画XKCD被黑客攻击,约56万用户数据被泄露
  13. 华为p40鸿蒙2.0演示,华为P40强硬登场:屏下镜头+鸿蒙2.0+徕卡5摄,国产骄傲绝不服输...
  14. 光纤激光器仿真:(6)Q开关-锁模的实时动力学
  15. 引用 软件开发公司管理手册
  16. 鸿蒙开发实战系列之五:鸿蒙系统原生数据库
  17. PDF文件转成图片保存
  18. 阿里三面必问JVM知识点- 使用堆外内存减少Full GC
  19. iOS网络诊断功能 ping traceroute
  20. matlab指数积分函数,如何使用matlab拟合指数分布函数?

热门文章

  1. 【Flask】ORM的关联关系
  2. 密码篇——非对称加密
  3. 在局域网可以访问电脑中存放的网页(IIS服务)
  4. 4、提高插入数据的速度
  5. 两种交换排序算法:冒泡排序和快速排序
  6. Spring boot的Restful风格CRUD
  7. Java引用类型与常量
  8. 整人之bat重启文件
  9. mongodb更新某个字段_直播 | MongoDB开源数据库的云上之路
  10. 精简 opencv python_01_opencv_python_基本图像处理