数据结构与算法分析

只要在常数时间内可以将问题的大小削减为其一部分($ frac{1}{2} $), 那么该算法就是($O(logN)$)

  1. 最大子序列和问题($O(NlogN)$)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public static int (int[] arr) {
    int maxSum = 0, thisSum = 0;
    for (int i = 0; i < arr.length; i++) {
    thisSum += arr[i];
    if (thisSum > maxSum) {
    maxSum = thisSum;
    } else if (thisSum < 0) {
    thisSum = 0;
    }
    }
    return maxSum;
    }
  2. 折半查找binary search($O(logN)$)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public static int binarySearch(int[] arr, int x) {
    int low = 0, high = arr.length - 1;
    while (low <= high) {
    int mid = (low + high)/2;
    if (arr[mid] < x) {
    low = ++mid;
    } else if (arr[mid] > x) {
    high = --mid;
    } else {
    return mid;
    }
    }
    return -1;
    }