[刷题]Binary Search

来源:互联网 发布:魔兽世界for mac 国服 编辑:程序博客网 时间:2024/06/07 01:50

[LintCode]Binary Search

class Solution {    /**     * @param nums: The integer array.     * @param target: Target to find.     * @return: The first position of target. Position starts from 0.     */    public int binarySearch(int[] nums, int target) {        // 2015-4-1 O(log n)        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; // 防止越界 等同于(start + end) / 2            if (nums[mid] >= target) {                end = mid;            } else {                start = mid;            }        } // while                if (nums[start] == target) {            return start;        }        if (nums[end] == target) {            return end;        }        return -1;    }}


普通的二分搜索,数组中不含重复元素

class Solution {    /**     * @param nums: The integer array.     * @param target: Target to find.     * @return: The first position of target. Position starts from 0.     */    public int binarySearch(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) / 2;            if (num[mid] == target) {                return mid;            } else if (nums[mid] < target) {                start = mid + 1;            }            if (nums[mid] >= target) {                end = mid - 1;            }        }                if (nums[start] == target) {            return start;        } else if (nums[end] == target) {            return end;        }        return -1;    }}

python

class Solution:    # @param nums: The integer array    # @param target: Target number to find    # @return the first position of target in nums, position start from 0     def binarySearch(self, nums, target):        if len(nums) == 0:            return -1                start = 0        end = len(nums) - 1        while start < end - 1:            mid = (start + end) / 2            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
原创粉丝点击