
数据结构 二分查找
温酒知莲华
这个作者很懒,什么都没留下…
展开
-
[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 · 264 阅读 · 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 · 491 阅读 · 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 · 416 阅读 · 0 评论 -
最左原位
有一个有序数组arr,其中不含有重复元素,请找到满足arr[i]==i条件的最左的位置。如果所有位置上的数都不满足条件,返回-1。给定有序数组arr及它的大小n,请返回所求值。测试样例:[-1,0,2,3],4返回:2class Find {public: int findPos(vector arr, int n) { //if(原创 2017-08-30 22:41:31 · 253 阅读 · 0 评论 -
[LintCode]428.x的n次幂
实现 pow(x,n) 注意事项不用担心精度,当答案和标准输出差绝对值小于1e-3时都算正确样例Pow(2.1, 3) = 9.261Pow(0, 1) = 0Pow(1, 0) = 1思路:迭代的解法,让i初始化为n,然后看i是否是2的倍数,是的话x乘以自己,否则res乘以x,i每次循环缩小一半,直到为0停止循环。最后看n的正负,如果为负,返回其倒原创 2017-08-31 00:05:36 · 479 阅读 · 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 · 353 阅读 · 0 评论