import java.util.Arrays;
public class Temp {
//右移数组m位
public static void shiftArray1(int[] data, int m) {
int len = data.length;
while (m-- > 0) {
int temp = data[len - 1];
for (int i = len - 1; i >= 1; i--) {
data[i] = data[i - 1];
}
data[0] = temp;
}
}
//右移数组m位
public static void shiftArray2(int[] data, int m) {
int len = data.length;
reverse(data, 0, len - 1);
reverse(data, 0, m - 1);
reverse(data, 2, len - 1);
}
//在右移后数组进行二分查找
public static int findKey(int[] data, int key) {
if (data == null || data.length == 0) {
return -1;
}
int len = data.length;
int left = 0;
int right = len - 1;
while (left <= right) {
int mid = (left + right) >> 1;
if (data[mid] == key) {
return mid;
}
if (data[mid] >= data[left]) {
if (key >= data[left] && key < data[mid]) {
right = mid - 1;
} else {
left = mid + 1;
}
} else {
if (key <= data[right] && key > data[mid]) {
left = mid + 1;
} else {
right = mid - 1;
}
}
}
return -1;
}
public static void swap(int[] data, int i, int j) {
int temp = data[i];
data[i] = data[j];
data[j] = temp;
}
public static void reverse(int[] data, int start, int end) {
for (int i = start, j = end; i < j; i++, j--) {
swap(data, i, j);
}
}
public static void main(String[] args) {
int[] data = {1, 2, 3, 4, 5, 6, 7, 8};
int[] dataCopy = {1, 2, 3, 4, 5, 6, 7, 8};
int m = 3;
shiftArray1(data, m);
System.out.println(Arrays.toString(data));
shiftArray2(dataCopy, m);
System.out.println(Arrays.toString(data));
int index = findKey(data, 3);
System.out.println("index:" + index);
}
}
数组右移后二分查找
最新推荐文章于 2024-11-07 22:56:37 发布