本文使用两种算法来实现,分别是二分查找法和插值查找法,发现插值查找法更好,更快地找到需要的数据。
代码如下:
package com
.moson
.search
;import java
.util
.Arrays
;
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
= 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
);}}}}}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
;}}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,编写程序输出这些数对,可以假设数组中不存在重复元素的全部内容,希望文章能够帮你解决所遇到的问题。
如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。