![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构 二分查找
温酒知莲华
这个作者很懒,什么都没留下…
展开
-
[LintCode]61.搜索区间
给定一个包含 n 个整数的排序数组,找出给定目标值 target 的起始和结束位置。 如果目标值不在数组中,则返回[-1, -1] 样例 给出[5, 7, 7, 8, 8, 10]和目标值target=8, 返回[3, 4] 思路:二分查找 class Solution { public: /* * @param A: an integer sorte原创 2017-08-20 00:27:08 · 225 阅读 · 0 评论 -
局部最小值位置
定义局部最小的概念。arr长度为1时,arr[0]是局部最小。arr的长度为N(N>1)时,如果arr[0] class Solution { public: int getLessIndex(vector arr) { int n = arr.size(); if(n <= 0) return -1; if(n == 1) retur原创 2017-08-30 20:54:08 · 459 阅读 · 0 评论 -
[LintCode]159.寻找旋转排序数组中的最小值
假设一个旋转排序的数组其起始位置是未知的(比如0 1 2 4 5 6 7 可能变成是4 5 6 7 0 1 2)。 你需要找到其中最小的元素。 你可以假设数组中不存在重复的元素。 样例:给出[4,5,6,7,0,1,2] 返回 0 思路:二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。适用于不经常变动原创 2017-07-31 14:17:40 · 346 阅读 · 0 评论 -
最左原位
有一个有序数组arr,其中不含有重复元素,请找到满足arr[i]==i条件的最左的位置。如果所有位置上的数都不满足条件,返回-1。 给定有序数组arr及它的大小n,请返回所求值。 测试样例: [-1,0,2,3],4 返回:2 class Find { public: int findPos(vector arr, int n) { //if(原创 2017-08-30 22:41:31 · 225 阅读 · 0 评论 -
[LintCode]428.x的n次幂
实现 pow(x,n) 注意事项 不用担心精度,当答案和标准输出差绝对值小于1e-3时都算正确 样例 Pow(2.1, 3) = 9.261 Pow(0, 1) = 0 Pow(1, 0) = 1 思路:迭代的解法,让i初始化为n,然后看i是否是2的倍数,是的话x乘以自己,否则res乘以x,i每次循环缩小一半,直到为0停止循环。最后看n的正负,如果为负,返回其倒原创 2017-08-31 00:05:36 · 439 阅读 · 0 评论 -
完全二叉树计数
给定一棵完全二叉树的根节点root,返回这棵树的节点个数。如果完全二叉树的节点数为N,请实现时间复杂度低于O(N)的解法。 给定树的根结点root,请返回树的大小。 思路:深度为h的二叉树至多有2h-1个结点(h>=1)。换句话说,满二叉树中前k层的结点个数为2h-1。 /* struct TreeNode { int val; struct TreeNode *原创 2017-08-31 00:06:52 · 314 阅读 · 0 评论