You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
88 lines
1.8 KiB
88 lines
1.8 KiB
package class01;
|
|
|
|
import java.util.Arrays;
|
|
|
|
public class Code01_CordCoverMaxPoint {
|
|
|
|
public static int maxPoint1(int[] arr, int L) {
|
|
int res = 1;
|
|
for (int i = 0; i < arr.length; i++) {
|
|
int nearest = nearestIndex(arr, i, arr[i] - L);
|
|
res = Math.max(res, i - nearest + 1);
|
|
}
|
|
return res;
|
|
}
|
|
|
|
public static int nearestIndex(int[] arr, int R, int value) {
|
|
int L = 0;
|
|
int index = R;
|
|
while (L <= R) {
|
|
int mid = L + ((R - L) >> 1);
|
|
if (arr[mid] >= value) {
|
|
index = mid;
|
|
R = mid - 1;
|
|
} else {
|
|
L = mid + 1;
|
|
}
|
|
}
|
|
return index;
|
|
}
|
|
|
|
public static int maxPoint2(int[] arr, int L) {
|
|
int left = 0;
|
|
int right = 0;
|
|
int N = arr.length;
|
|
int max = 0;
|
|
while (left < N) {
|
|
while (right < N && arr[right] - arr[left] <= L) {
|
|
right++;
|
|
}
|
|
max = Math.max(max, right - (left++));
|
|
}
|
|
return max;
|
|
}
|
|
|
|
// for test
|
|
public static int test(int[] arr, int L) {
|
|
int max = 0;
|
|
for (int i = 0; i < arr.length; i++) {
|
|
int pre = i - 1;
|
|
while (pre >= 0 && arr[i] - arr[pre] <= L) {
|
|
pre--;
|
|
}
|
|
max = Math.max(max, i - pre);
|
|
}
|
|
return max;
|
|
}
|
|
|
|
// for test
|
|
public static int[] generateArray(int len, int max) {
|
|
int[] ans = new int[(int) (Math.random() * len) + 1];
|
|
for (int i = 0; i < ans.length; i++) {
|
|
ans[i] = (int) (Math.random() * max);
|
|
}
|
|
Arrays.sort(ans);
|
|
return ans;
|
|
}
|
|
|
|
public static void main(String[] args) {
|
|
int len = 100;
|
|
int max = 1000;
|
|
int testTime = 100000;
|
|
System.out.println("测试开始");
|
|
for (int i = 0; i < testTime; i++) {
|
|
int L = (int) (Math.random() * max);
|
|
int[] arr = generateArray(len, max);
|
|
int ans1 = maxPoint1(arr, L);
|
|
int ans2 = maxPoint2(arr, L);
|
|
int ans3 = test(arr, L);
|
|
if (ans1 != ans2 || ans2 != ans3) {
|
|
System.out.println("oops!");
|
|
break;
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
}
|