经典的二分法

来源:互联网 发布:2015全国交通事故数据 编辑:程序博客网 时间:2024/06/05 19:34

Find any position of a target number in a sorted array. Return -1 if target does not exist.

Example
Given [1, 2, 2, 4, 5, 5].

For target = 2, return 1 or 2.

For target = 5, return 4 or 5.

For target = 6, return -1.

二分法模板:
start + 1 < end
start + (end - start) / 2
a[mid] == , < , >
a[start], a[end] ? target

public class Solution {    /**     * @param nums: An integer array sorted in ascending order     * @param target: An integer     * @return an integer     */    public int findPosition(int[] nums, int target) {        // Write your code here        if (nums == null || nums.length == 0) {            return -1;        }        int start = 0;         int end = nums.length - 1;        while (start + 1 < end) {            int mid = start + (end - start) / 2;            if (nums[mid] == target) {                return mid;            } else if (nums[mid] < target) {                start = mid;            } else {                end = mid;            }        }        if (nums[start] == target) {            return start;        }        if (nums[end] == target) {            return end;        }        return -1;    }}
0 0