思路

代码
数组类
public class MyArray {
private int[] elements;
public MyArray() {
elements = new int[0];
}
public int size() {
return elements.length;
}
public void add(int element) {
int[] newArray = new int[elements.length + 1];
for (int i = 0; i < elements.length; i++) {
newArray[i] = elements[i];
}
newArray[elements.length] = element;
elements = newArray;
}
public void show() {
System.out.println(Arrays.toString(elements));
}
public void delete(int index) {
if (index < 0 || index > elements.length) {
throw new RuntimeException("数组下标越界");
}
int[] newArr = new int[elements.length - 1];
for (int i = 0; i < elements.length; i++) {
if (i < index) {
newArr[i] = elements[i];
} else if (i > index) {
newArr[i - 1] = elements[i];
}
}
elements = newArr;
}
public int get(int index) {
return elements[index];
}
public void insert(int index, int element) {
int[] newArr = new int[elements.length + 1];
for (int i = 0; i < elements.length; i++) {
if (i < index) {
newArr[i] = elements[i];
} else {
newArr[i + 1] = elements[i];
}
newArr[index] = element;
}
elements = newArr;
}
public void set(int index, int element) {
if (index < 0 || index > elements.length) {
throw new RuntimeException("数组下标越界");
}
elements[index] = element;
}
public int search(int target) {
for (int i = 0; i < elements.length; i++) {
if (elements[i] == target) {
return i;
}
}
return -1;
}
public List<Integer> binarySearch2(MyArray myArray, int left, int right, int target) {
if (left > right) {
return new ArrayList<Integer>();
}
int mid = (left + right) / 2;
int midVal = myArray.elements[mid];
if (target > midVal) {
left = mid + 1;
return binarySearch2(myArray, left, right, target);
}
else if (target < midVal) {
right = mid - 1;
return binarySearch2(myArray, left, right, target);
}
else {
List<Integer> resIndexList = new ArrayList<>();
int temp = mid - 1;
while (true) {
if (temp < 0 || myArray.elements[temp] != target) {
break;
}
resIndexList.add(temp);
temp -= 1;
}
resIndexList.add(mid);
temp = mid + 1;
while (true) {
if (temp > myArray.elements.length - 1 || myArray.elements[temp] != target) {
break;
}
resIndexList.add(temp);
temp += 1;
}
return resIndexList;
}
}
}
测试
public class TestMyArray {
public static void main(String[] args) {
MyArray myArray = new MyArray();
int size = myArray.size();
System.out.println(size);
myArray.add(99);
myArray.add(98);
myArray.add(97);
System.out.println(myArray.size());
myArray.show();
myArray.add(100);
myArray.show();
myArray.delete(3);
myArray.show();
myArray.insert(2, 100);
myArray.show();
myArray.set(3,101);
myArray.show();
MyArray myArrayNew = new MyArray();
myArrayNew.add(1);
myArrayNew.add(8);
myArrayNew.add(10);
myArrayNew.add(89);
myArrayNew.add(89);
myArrayNew.add(99);
myArrayNew.add(99);
myArrayNew.add(1000);
myArrayNew.add(1000);
myArrayNew.add(1234);
List<Integer> resultIndexList = myArray.binarySearch3(myArrayNew, 0, myArrayNew.size(), 99);
System.out.print("找到的符合target的索引为: ");
for (int i = 0; i < resultIndexList.size(); i++) {
System.out.printf("%s\t",resultIndexList.get(i));
}
}
打印结果
