本文使用兩種算法來實(shí)現(xiàn),分別是二分查找法和插值查找法,發(fā)現(xiàn)插值查找法更好,更快地找到需要的數(shù)據(jù)。
代碼如下:
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("數(shù)組為空");} else {if (array
[0] + array
[array
.length
- 1] < 100) {System
.out
.println("該數(shù)組的值不正確,不能相加小于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("找到數(shù)對:%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("調(diào)用二分查找法");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("調(diào)用插值查找法");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
;}}}
總結(jié)
以上是生活随笔為你收集整理的Java面试题:在一个递增的数组里面,找出任意两个数的和等于100,编写程序输出这些数对,可以假设数组中不存在重复元素的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。