博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LintCode] First Position Of Target
阅读量:4938 次
发布时间:2019-06-11

本文共 1163 字,大约阅读时间需要 3 分钟。

给定一个排序的整数数组(升序)和一个要查找的整数target,用O(logn)的时间查找到target第一次出现的下标(从0开始),如果target不存在于数组中,返回-1

样例

在数组 [1, 2, 3, 3, 4, 5, 10] 中二分查找3,返回2

根据二分搜索的定义,找出这个target不难,难处在于找出target第一次出现的下标。
仔细分析二分搜索的基础算法可知,判断了array[mid]与target的三种情况(等于、小于、大于)。找出target第一次出现的下标,也就是说要保证array[mid] < target,仅在(left = mid + 1) ~ right间搜索,当left > right时,此时array[left]为不小于target的那个数。如果该数为target则返回其索引,如果不是target,则表示array数组中不含target,返回-1即可。

class Solution {public:    /**     * @param nums: The integer array.     * @param target: Target number to find.     * @return: The first position of target. Position starts from 0.      */    int binarySearch(vector
&array, int target) { // write your code here if (array.empty()) return -1; int left = 0, right = array.size() - 1; int mid = 0; while (left <= right) { mid = left + (right - left) / 2; if (array[mid] < target) left = mid + 1; else right = mid - 1; } if (array[left] == target) return left; else return -1; }};// 1335 ms

 

转载于:https://www.cnblogs.com/immjc/p/7988305.html

你可能感兴趣的文章
数据类型
查看>>
ACM基础训练题解4301 城市地平线
查看>>
Python基础练习
查看>>
《Android开发艺术探索》读书笔记 (13) 第13章 综合技术、第14章 JNI和NDK编程、第15章 Android性能优化...
查看>>
python 中的匿名函数lamda和functools模块
查看>>
full gc频繁的分析及解决案例
查看>>
_17NOIP考后随笔
查看>>
centos 7中编译安装httpd-2.4.25.tar.gz
查看>>
第一个一万行程序
查看>>
zeroclipboard复制插件兼容IE8
查看>>
Mina学习之IoHandler
查看>>
电脑配置Java环境变量之后,在cmd中仍然无法识别
查看>>
apue编译方法(收集整合)
查看>>
MAC下安装nginx(转载)
查看>>
leetcode 572. 另一个树的子树(Subtree of Another Tree)
查看>>
慎用preg_replace危险的/e修饰符(一句话后门常用)
查看>>
vuex 完全复制https://blog.csdn.net/u012149969/article/details/80350907
查看>>
获取某地的经纬度 && 通过经纬度获取相应的地理位置
查看>>
一道C题目
查看>>
Process.StandardOutput
查看>>