diff --git a/src/leo/class01/BSAwesome.java b/src/leo/class01/BSAwesome.java index a22bacb..053eefc 100644 --- a/src/leo/class01/BSAwesome.java +++ b/src/leo/class01/BSAwesome.java @@ -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]> 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!"); + } + + + + } diff --git a/src/leo/util/ArrayUtil.java b/src/leo/util/ArrayUtil.java index 12f9736..8fa9ff3 100644 --- a/src/leo/util/ArrayUtil.java +++ b/src/leo/util/ArrayUtil.java @@ -1,5 +1,7 @@ package leo.util; +import org.omg.CORBA.IRObject; + import java.util.Arrays; /** @@ -130,14 +132,14 @@ public class ArrayUtil { arrName = arrName == null ? "arr" : arrName; arrStr.append(" " + arrName + " = ["); if (arr == null || arr.length <= 0) { - System.out.println(); arrStr.append("]"); + System.out.println(arrStr); + return; } for (int i = 0; i < arr.length; i++) { - arrStr.append(" " + arr[i] + ","); + arrStr.append(" " + arr[i] + (i==arr.length-1?"":",")); } - arrStr.substring(0, arrStr.length() - 2); arrStr.append(" ]"); System.out.println(arrStr); } @@ -154,6 +156,31 @@ public class ArrayUtil { } + /** + * 功能描述 : 随机生成无序数组且任意相邻的数不相等 + * @author Leo + * @date 2020/11/13 11:21 上午 + * @param maxSize + * @param range + * @return int[] + */ + public static int[] randomAdjacentNotEqualArray(int maxSize, int range) { + int[] arr = new int[(int) ((maxSize + 1) * Math.random())]; + Integer preNum = null; + for (int i = 0; i < arr.length; i++) { + int randomNum = (int) ((range + 1) * Math.random() - range * Math.random()); + + if (preNum != null) { + while (preNum == randomNum) { + randomNum = (int) ((range + 1) * Math.random() - range * Math.random()); + } + } + preNum = randomNum; + arr[i] = randomNum; + } + return arr; + } + }