java面试常考算法题记录
public static int find(int[]arr,int data){
int mid=0;
int left=0;
int right=arr.length-1;
while (left<=right){
mid=(right+left)/2;
if(arr[mid]>data){
right=mid-1;
}else if(arr[mid]<data) {
left=mid+1;
}else {
return arr[mid];
}
}
return -1;
}
public static int find(int[]arr,int data,int left,int right){
if(left==right)return -1;
int mid=(left+right)/2;
if(arr[mid]==data) return arr[mid];
return arr[mid]>data?find(arr,data,left,mid-1):find(arr,data,mid+1,right);
}
public static Node reverse(Node head){
if(null==head||null==head.getNext()) return head;
Node reHead = reverse(head.getNext());
head.getNext().setNext(head);
head.setNext(null);
return reHead;
}
public static Node reverse1(Node head){
if(null==head) return head;
Node pre=head;
Node cur=head.getNext();
Node temp;
while (null!=cur){
temp=cur.getNext();
cur.setNext(pre);
pre=cur;
cur=temp;
}
head.setNext(null);
return pre;
}
public static void printNode(Node head){
while (null!=head.getNext()){
System.out.print(head.getValue());
System.out.print(",");
head=head.getNext();
}
System.out.println(head.getValue());
}
public static void quickSort(int[]arr,int left,int right){
if(arr.length==0) return;
if(left>right) return;
System.out.println("arr="+Arrays.toString(arr)+" ,left="+left+",right="+right);
int index = midIndex(arr, left, right);
quickSort(arr,left,index-1);
quickSort(arr,index+1,right);
}
private static int midIndex(int[]arr,int left,int right){
int mid=arr[left];
System.out.println("mid="+mid);
while (left<right){
while (left<right&&arr[right]>=mid){
right--;
}
arr[left]=arr[right];
System.out.println("right move:"+Arrays.toString(arr));
while (left<right&&arr[left]<mid){
left++;
}
arr[right]=arr[left];
System.out.println("left move:"+Arrays.toString(arr));
}
arr[left]=mid;
return left;
}
public static void heapSort(int[] arr) {
for (int i = arr.length / 2; i >= 0; i--) {
adjustHeap(arr, i, arr.length);
}
for (int i = arr.length - 1; i >= 0; i--) {
int temp = arr[i];
arr[i] = arr[0];
arr[0] = temp;
System.out.println(arr[i]);
adjustHeap(arr, 0, i);
}
}
private static void adjustHeap(int[] arr, int parent, int length) {
int child = 2 * parent + 1;
int temp = arr[parent];
while (child < length) {
if (child + 1 < length && arr[child] < arr[child + 1]) {
child++;
}
if (temp > arr[child]) {
break;
}
arr[parent] = arr[child];
parent = child;
child = 2 * parent + 1;
}
arr[parent] = temp;
}
private static String longestPalindrome(String str){
int start=0;
int end=0;
for(int i=0;i<str.length();i++){
int index1 = maxLenght(str, i, i);
int index2=maxLenght(str,i,i+1);
int len = Math.max(index1, index2);
if(end-start<len){
start=i-(len-1)/2;
end=i+len/2;
}
}
return str.substring(start,end);
}
private static int maxLenght(String str,int left,int right){
while (left>=0&&right<str.length()&&str.charAt(left)==str.charAt(right)){
left--;
right++;
}
return right-left-1;
}