算法小記

只要在常數時間內能夠將問題的大小削減爲其一部分($ \frac{1}{2} \(), 那麼該算法就是(\)O(logN)$)java

  1. 最大子序列和問題(\(O(NlogN)\))
public static int maxSubSum(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;
}
  1. 折半查找binary search(\(O(logN)\))
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;
    }
相關文章
相關標籤/搜索