|
|
|
|
@ -1,5 +1,9 @@
|
|
|
|
|
package leo.class01;
|
|
|
|
|
|
|
|
|
|
import com.sun.org.apache.xpath.internal.functions.FuncFalse;
|
|
|
|
|
import leo.util.ArrayUtil;
|
|
|
|
|
import sun.security.util.Length;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @author Leo
|
|
|
|
|
* @ClassName BSAwesome
|
|
|
|
|
@ -36,4 +40,116 @@ public class BSAwesome {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public static int BSAwesome1(int[] arr) {
|
|
|
|
|
if (arr.length == 0 || arr == null) {
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
if (arr.length == 1||arr[0] < arr[1]) {
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
if (arr[arr.length-1]<arr[arr.length-2]){
|
|
|
|
|
return arr.length - 1;
|
|
|
|
|
}
|
|
|
|
|
int L = 1;
|
|
|
|
|
int R = arr.length - 2;
|
|
|
|
|
int mid = 0;
|
|
|
|
|
while (L < R) {
|
|
|
|
|
mid = L + ((R - L) >> 1);
|
|
|
|
|
if (arr[mid] > arr[mid - 1]) {
|
|
|
|
|
R = mid - 1;
|
|
|
|
|
} else if (arr[mid] > arr[mid + 1]) {
|
|
|
|
|
L = mid + 1;
|
|
|
|
|
}else {
|
|
|
|
|
return mid;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static int testBSAwesome(int[] arr) {
|
|
|
|
|
if (arr.length == 0 || arr == null) {
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
if (arr.length >= 1&&arr[0] < arr[1]) {
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
if (arr[arr.length - 1] < arr[arr.length - 2]) {
|
|
|
|
|
return arr.length - 1;
|
|
|
|
|
}
|
|
|
|
|
Integer first = null;
|
|
|
|
|
|
|
|
|
|
Integer end = null;
|
|
|
|
|
|
|
|
|
|
for (int i = 1; i < arr.length-2; i++) {
|
|
|
|
|
int res = arr[i];
|
|
|
|
|
if (first == null) {
|
|
|
|
|
first = i-1;
|
|
|
|
|
}
|
|
|
|
|
if (end == null) {
|
|
|
|
|
end = i + 1;
|
|
|
|
|
}
|
|
|
|
|
if (arr[first] > res && res < arr[end]) {
|
|
|
|
|
return i;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public static int verifyBSAwesome(int[] arr, int index) {
|
|
|
|
|
if (arr.length == 0 || index == -1) {
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
if (arr.length == 1 && index == 0) {
|
|
|
|
|
return index;
|
|
|
|
|
}
|
|
|
|
|
if (arr.length >= 1 && index == 0 ){
|
|
|
|
|
if (index + 1< arr.length && arr[index] < arr[index + 1]) {
|
|
|
|
|
return index;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (index - 1 >= 0) {
|
|
|
|
|
if (index == arr.length-1 ) {
|
|
|
|
|
if (arr[index] < arr[index - 1]) {
|
|
|
|
|
return index;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (index == arr.length - 1) {
|
|
|
|
|
if (arr[arr.length - 1] < arr[arr.length - 2]) {
|
|
|
|
|
return index;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (arr[index - 1] > arr[index] && arr[index] < arr[index + 1]) {
|
|
|
|
|
return index;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void main(String[] arg) {
|
|
|
|
|
int maxSize = 80;
|
|
|
|
|
int range = 80;
|
|
|
|
|
int testTime = 100000;
|
|
|
|
|
boolean succeed = true;
|
|
|
|
|
for (int i = 0; i < testTime; i++) {
|
|
|
|
|
int[] arr = ArrayUtil.randomAdjacentNotEqualArray(maxSize, range);
|
|
|
|
|
final int index = BSAwesome1(arr);
|
|
|
|
|
final int verifyIndex = verifyBSAwesome(arr,index);
|
|
|
|
|
if (index != verifyIndex) {
|
|
|
|
|
succeed = false;
|
|
|
|
|
ArrayUtil.printArr(arr, "index : " + index + " | testIndex : " + verifyIndex);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
System.out.println(succeed ? "Nice!" : "Fucking Fucked!");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|