二分查找算法
public class Test {
public static void main(String[] args) {
int[] array=new int[]{1,2,3,4,5,6,7,10};
int index=binarySearch(array,0,array.length-1,10);
System.out.println("输出"+index);
}
public static int binarySearch(int[] array,int low,int high,int target){
if (low>high) return -1;
int mid=low+(high-low)/2;
if (array[mid]==target) return mid;
if (array[mid]>target) return binarySearch(array,low,mid-1,target);
if (array[mid]<target) return binarySearch(array,mid+1,high,target);
return -1;
}
}
快速排序算法
public class Test {
public static void main(String[] args) {
int[] array=new int[]{5,3,8,6,4};
quickSort(array,0,array.length-1);
}
public static int partition(int[] array,int left, int right){
int pivokey=array[left];
int i=left;
int j=right;
while (i<j){
while (i<j&&array[j]>=pivokey) j--;
while (i<j&&array[i]<=pivokey) i++;
if (i<j){
int temp=array[j];
array[j]=array[i];
array[i]=temp;
}
}
array[left]=array[i];
array[i]=pivokey;
return i;
}
public static void quickSort(int[] array,int left,int right){
if (left>right) return;
int position=partition(array,left,right);
quickSort(array,left,position-1);
quickSort(array,position+1,right);
}
}
链表相关
class ListNode {
public ListNode next;
int val;
public ListNode(int val) {
this.val = val;
}
public ListNode getNext() {
return next;
}
public void setNext(ListNode next) {
this.next = next;
}
public int getVal() {
return val;
}
public void setVal(int val) {
this.val = val;
}
}
链表反转
private static ListNode reverseLinkedList(ListNode head) {
ListNode pre = null;
ListNode curr = head;
while (curr != null) {
ListNode tempNode = curr.next;
curr.next = pre;
pre = curr;
curr = tempNode;
}
return pre;
}
2个有序链表合并
public static ListNode mergeList(ListNode l1, ListNode l2) {
ListNode prehead = new ListNode(-1);
ListNode prev = prehead;
while (l1 != null && l2 != null) {
if (l1.val < l2.val) {
prev.next = l1;
l1 = l1.next;
} else {
prev.next = l2;
l2 = l2.next;
}
prev = prev.next;
}
prev.next = l1 == null ? l2 : l1;
return prehead.next;
}
树的按层遍历
public static List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> result = new ArrayList<>();
if (root == null) return result;
Queue<TreeNode> listQueue = new LinkedList<>();
listQueue.offer(root);
while (!listQueue.isEmpty()) {
int levelNum = listQueue.size();
List<Integer> currentLevel = new ArrayList<>();
for (int i = 0; i < levelNum; i++) {
TreeNode currentTreeNode = listQueue.poll();
currentLevel.add(currentTreeNode.val);
if (currentTreeNode.left != null)
listQueue.offer(currentTreeNode.left);
if (currentTreeNode.right != null)
listQueue.offer(currentTreeNode.right);
}
result.add(currentLevel);
}
return result;
}