package org.example;
public class MP {
public static void main(String[] args) {
int[] arrays = {1, 2, 2,3, 3, 4, 6, 8};
int numIndex = findRightestNumIndex(arrays, 3);
System.out.println("numIndex = " + numIndex);
}
public static int findLftestNumIndex(int[] arrays, int num) {
if (arrays == null || arrays.length == 0) {
return -1;
}
int leftIndex = 0;
int rightIndex = arrays.length - 1;
int ansIndex = -1;
while (leftIndex <= rightIndex) {
int mid = (leftIndex + rightIndex) / 2;
if (arrays[mid] == num) {
ansIndex = mid;
rightIndex = mid - 1;
} else if (arrays[mid] > num) {
rightIndex = mid - 1;
} else {
leftIndex = mid + 1;
}
}
return ansIndex;
}
public static int findRightestNumIndex(int[] arrays, int num) {
if (arrays == null || arrays.length == 0) {
return -1;
}
int leftIndex = 0;
int rightIndex = arrays.length - 1;
int ans = -1;
while (leftIndex <= rightIndex) {
int midIndex = (leftIndex + rightIndex) / 2;
if (arrays[midIndex] == num) {
ans = midIndex;
// 继续向右遍历,找最右侧的num的索引
leftIndex = midIndex + 1;
} else if (arrays[midIndex] > num) {
rightIndex = midIndex - 1;
} else {
leftIndex = midIndex + 1;
}
}
return ans;
}
}
有序数组中找到=num最左的位置或最右位置
最新推荐文章于 2024-07-13 13:55:40 发布