2.7 查找算法整合
代码演示:
MyArray.java
package com.kami.leetcode.alg.util;
import java.util.Arrays;
public class MyArray {
//创建一个数组
private int[] arr;
//构造方法
public MyArray(){
arr = new int[0];
}
//获取数组长度的方法
public int size(){
return arr.length;
}
//往数组的末尾添加数组
public void add(int element){
int[] newArr = new int[arr.length + 1];
for(int i = 0; i < arr.length; i++){
newArr[i] = arr[i];
}
newArr[arr.length] = element;
//使用新数组替换原数组
arr = newArr;
}
//打印所有元素
public void show(){
System.out.println(Arrays.toString(arr));
}
//删除数组中的元素
public void deleteForElement(int index){
if(index < 0 || index > arr.length - 1){ //判断下标是否越界
throw new RuntimeException("下标异常");
}
int[] newArr = new int[arr.length - 1];
for(int i = 0; i < newArr.length; i++){
if(i < index){
newArr[i] = arr[i];
}else {
newArr[i] = arr[i + 1];
}
}
arr = newArr;
}
//取出指定位置的元素
public int get(int index){
if(index < 0 || index > arr.length - 1){ //判断下标是否越界
throw new RuntimeException("下标异常");
}
return arr[index];
}
//插入一个元素到指定位置
public void insert(int index, int element){
//创建一个新数组
int[] newArr = new int[arr.length + 1];
//将原数组中的元素放入新数组中
for(int i = 0; i < arr.length; i++){
if(i < index){ //目标位置之前的元素
newArr[i] = arr[i];
}else{ //目标位置之后的元素
newArr[i + 1] = arr[i];
}
}
newArr[index] = element;
arr = newArr;
}
//替换指定位置的元素
public void set(int index, int element){
if(index < 0 || index > arr.length - 1){ //判断下标是否越界
throw new RuntimeException("下标异常");
}
arr[index] = element;
}
//线性查找
public int search(int target){
//遍历数组
for(int i = 0; i < arr.length; i++){
if(arr[i] == target){
return i;
}
}
return -1;
}
//二分法查找
public int binarySearch(int target){
int begin = 0;
int end = arr.length - 1;
int mid = (begin + end) / 2;
while (true){
//什么情况下没有这个元素
//开始位置在结束位置之后或重合,就没有这个元素了
if(begin >= end){
return -1;
}
if(arr[mid] == target){
return mid;
}else {
if(arr[mid] > target){
end = mid - 1;
}else {
begin = mid + 1;
}
mid = (begin + end) / 2;
}
}
}
}
测试:TestMyArraySearch.java
package com.kami.leetcode.alg;
import com.kami.leetcode.alg.util.MyArray;
public class TestMyArraySearch {
public static void main(String[] args) {
MyArray myArray = new MyArray();
myArray.add(5);
myArray.add(6);
myArray.add(7);
myArray.add(8);
int index = myArray.search(0);
int i = myArray.binarySearch(0);
System.out.println(i);
System.out.println(index);
}
}
结果: