• leetcode算法入门 二分查找


    1. Binary Search

    一个升序的整型数组,数组中的数字不重复。写一个函数,要求输入目标数字,返回这个

    目标数字在数组里的下标,不存在则返回-1

    要求时间复杂度为O(log n)

    Solution By C:

     1 int search(int* nums, int numsSize, int target){
     2 
     3     int left = 0;
     4     int right = numsSize-1;
     5     int mid = 0;
     6     while(left<=right) {
     7         mid = (right-left)>>1 + left;
     8         if(nums[mid] > target) {
     9             right = middle-1;
    10         }
    11         else if(nums[mid] < target) {
    12             left = mid+1;
    13         }
    14         else if(nums[mid] == target){
    15             return mid;
    16         }
    17     }
    18 
    19     return -1;
    20 }

    2. First Bad Version

    数组[1,2,3,4...,n]中存储的是n个版本的版本号,现提供一个函数 isBadVersion,输入版本号,返回

    True或False表示版本的好坏。如果某版本是坏的,那他后面的版本也必然是坏的。现在要求写一个函数,

    实现最少次调用isBadVersion,返回最初坏掉的那个版本号。

    Solution By C:

     1 // The API isBadVersion is defined for you.
     2 // bool isBadVersion(int version);
     3 
     4 int firstBadVersion(int n) {
     5     int left = 1, right = n;
     6     while (left < right) {  // 循环直至区间左右端点相同
     7         int mid = left + (right - left) >> 1;  // 防止计算时溢出
     8         if (isBadVersion(mid)) {
     9             right = mid;  // 答案在区间 [left, mid] 中
    10         } else {
    11             left = mid + 1;  // 答案在区间 [mid+1, right] 中
    12         }
    13     }
    14     // 此时有 left == right,区间缩为一个点,即为答案
    15     return left;   
    16     
    17 }

    3. Search Insert Position

    一个不包含相同值的升序数组,给定一个目标值,返回目标值在数组中的索引。

    如果不存在,返回它将要被插入的位置。

     1 int searchInsert(int* nums, int numsSize, int target) {
     2     int left = 0, right = numsSize - 1;
     3     while (left <= right) {
     4         int mid = ((right - left) >> 1) + left;
     5         if (target <= nums[mid])
     6             right = mid -1;
     7         else
     8             left = mid + 1;
     9     }
    10     return left;
    11 }
  • 相关阅读:
    javascript基础
    DOM操作
    js各种弹框
    ZeroMQ,史上最快的消息队列(转)
    mysql 存储过程
    java数据结构与算法(二)----栈和队列
    java数据结构与算法(一)----数组简单排序
    软件开发流程(转)
    Digest [information value filtering]
    Facebook 的系统架构(转)
  • 原文地址:https://www.cnblogs.com/jdbc2nju/p/15835819.html
Copyright © 2020-2023  润新知