zoukankan      html  css  js  c++  java
  • 二分查找

    class Solution {
    public static void main(String[] args) {
    // System.out.println(new Solution().find132pattern(new int[]{7, 6, 5, 1, 2, 4, 3}));
    int[] arr = {1, 2, 2, 2, 2, 3, 3, 4,5,5,5};
    System.out.println(new Solution().left_bound(arr, 1));
    System.out.println(new Solution().left_bound2(arr, 1));
    System.out.println(new Solution().right_bound(arr, 1));
    System.out.println(new Solution().right_bound2(arr, 1));
    System.out.println(new Solution().binarySearch(arr, 1));
    }

    int left_bound(int[] nums, int target) {
    if (nums.length == 0) {
    return -1;
    }
    int left = 0;
    int right = nums.length; // 注意

    while (left < right) { // 注意
    int mid = (left + right) / 2;
    if (nums[mid] == target) {
    right = mid;
    } else if (nums[mid] < target) {
    left = mid + 1;
    } else if (nums[mid] > target) {
    right = mid; // 注意
    }
    }
    return left;
    }
    int left_bound2(int[] nums, int target) {
    if (nums.length == 0) {
    return -1;
    }
    int left = 0;
    int right = nums.length-1; // 注意

    while (left <= right) { // 注意
    int mid = (left + right) / 2;
    if (nums[mid] == target) {
    right = mid-1;
    } else if (nums[mid] < target) {
    left = mid + 1;
    } else if (nums[mid] > target) {
    right = mid-1; // 注意
    }
    }
    return left;
    }

    int right_bound(int[] nums, int target) {
    if (nums.length == 0) {
    return -1;
    }
    int left = 0, right = nums.length;

    while (left < right) {
    int mid = (left + right) / 2;
    if (nums[mid] == target) {
    left = mid + 1; // 注意
    } else if (nums[mid] < target) {
    left = mid + 1;
    } else if (nums[mid] > target) {
    right = mid;
    }
    }
    return left - 1; // 注意
    }
    int right_bound2(int[] nums, int target) {
    if (nums.length == 0) {
    return -1;
    }
    int left = 0, right = nums.length-1;

    while (left <= right) {
    int mid = (left + right) / 2;
    if (nums[mid] == target) {
    left = mid+1; // 注意
    } else if (nums[mid] < target) {
    left = mid+1;
    } else if (nums[mid] > target) {
    right = mid-1;
    }
    }
    return left-1; // 注意
    }

    int binarySearch(int[] nums, int target) {
    int left = 0;
    int right = nums.length - 1; // 注意

    while (left <= right) { // 注意
    int mid = (right + left) / 2;
    if (nums[mid] == target) {
    return mid;
    } else if (nums[mid] < target) {
    left = mid + 1; // 注意
    } else if (nums[mid] > target) {
    right = mid - 1; // 注意
    }
    }
    return -1;
    }
    }
    参考:https://www.zhihu.com/question/36132386/answer/712269942
  • 相关阅读:
    C# 获取 域(AD) 用户信息
    如何在 MOSS 2007 启用 Session
    安装 卸载 回收 sharepoint 解决方案 moss wss wsp
    [转]挑战Windows极限:物理内存
    霍特卡的 CSLA.Net 3.6 Windows及Silverlight的正式版 昨天发布 同时CSLA.Net 业务对象 2008 英文版图书可以网上订购
    转帖如何在不联网的情况下安装 Silverlight Tools
    jQuery 选择器的使用
    关闭 Windows Server 2008 用户权限控制(UAC)
    jQuery 的第一个例子
    jQuery for Asp.Net 一步一步从入门到精通(附 jQuery API 彩色大图)
  • 原文地址:https://www.cnblogs.com/xufan/p/14600300.html
Copyright © 2011-2022 走看看