问题I

Solution1:我的答案

二分查找
A是升序的vector&lt;int&gt;vector&lt;int&gt;vector<int>
注意不要烦傻逼错误!!!

class MagicIndex {
public:bool findMagicIndex(vector<int> A, int n) {int low = 0, high = n-1, mid = 0;while(low <= high) {mid = (low + high)/2;if(A[mid] == mid)return true;else if(A[mid] < mid) low = mid + 1;else high = mid - 1;}return false;}
};

问题II

Solution1:我的答案,

A是不降序的vector&lt;int&gt;vector&lt;int&gt;vector<int>,这就稍微麻烦一点了。。。
书上的思路

class MagicIndex {
public:bool findMagicIndex(vector<int> A, int n) {// write code hereint start = 0, end = 0;return my_find(A, n, start, end);}bool my_find(vector<int> A, int n,int start=0,int end =0) {// write code here/*事实上,看到A[5]=3时按照二分查找的做法,我们需要递归搜索右半部分。不过,如搜索左半部分,我们可以跳过一些元素,值递归搜索A[0]到A[3]的元素。A[3]是第一个可能成为魔术索引的元素。综上:我们得到一种搜索模式,先比较midIndex和midValue是否相同。然后,若两者不同,则按如下方式递归搜索左半部分和右半部分。左半部分:搜索索引从start到min(midIndex-1,midValue)的元素。右半部分:搜索索引从max(midIndex+1,midValue)到end的元素。*/if (start > end || start < 0 || end > n){return false;}int mid = (end + start) / 2;if (A[mid] == mid){return true;}else{int leftEnd = min(mid - 1, A[mid]);int rightStart = max(mid + 1, A[mid]);return my_find(A, n, start, leftEnd) || my_find(A, n, rightStart, end);}}
};

程序员面试金典——9.3魔术索引相关推荐

  1. C#LeetCode刷题-程序员面试金典

    本文由 比特飞 原创发布,欢迎大家踊跃转载. 转载请注明本文地址:C#LeetCode刷题-程序员面试金典 | .Net中文网. C#LEETCODE刷题概述 概述 所有LeetCode程序员面试金典 ...

  2. 程序员面试金典(第 6 版)(简单篇)

    程序员面试金典 第6版 简单篇 简单篇 面试题 01.01. 判定字符是否唯一 面试题 01.02. 判定是否互为字符重排 面试题 01.03. URL化 面试题 01.04. 回文排列 面试题 01 ...

  3. 程序员面试金典 - 面试题 10.03. 搜索旋转数组

    题目难度: 中等 原题链接 今天继续更新程序员面试金典系列, 大家在公众号 算法精选 里回复 面试金典 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 搜索旋转数组.给定一个排序后的数组 ...

  4. 程序员面试金典1.1

    程序员面试金典1.1 重新用java刷一遍,熟悉java语言 文章目录 程序员面试金典1.1 1. 二次遍历 2.哈希表Map 3.利用set的不可重复性 4.用数组 5.位运算 6.用String自 ...

  5. 【程序员面试金典】01.01. 判断字符是否唯一

    判定字符是否唯一 实现一个算法,确定一个字符串 s 的所有字符是否全都不同.假使不允许使用额外的数据结构,又该如何处理? 示例 1: 输入: s = "leetcode" 输出: ...

  6. 程序员面试金典--第k个数

    程序员面试金典--第k个数 题目描述 有一些数的素因子只有3.5.7,请设计一个算法,找出其中的第k个数. 给定一个数int k,请返回第k个数.保证k小于等于100. 测试样例: 3 返回:7 逐个 ...

  7. 程序员面试金典 - 面试题 08.13. 堆箱子(DP)

    1. 题目 堆箱子.给你一堆n个箱子,箱子宽 wi.深 di.高 hi. 箱子不能翻转,将箱子堆起来时,下面箱子的宽度.高度和深度必须大于上面的箱子. 实现一种方法,搭出最高的一堆箱子.箱堆的高度为每 ...

  8. 程序员面试金典 - 面试题 17.08. 马戏团人塔(最长上升子序 DP/二分查找)

    文章目录 1. 题目 2. 解题 2.1 超时解 2.2 二分查找 1. 题目 有个马戏团正在设计叠罗汉的表演节目,一个人要站在另一人的肩膀上.出于实际和美观的考虑,在上面的人要比下面的人矮一点且轻一 ...

  9. 《程序员面试金典》解题目录(更新完毕)

    题目来源于LeetCode上的<程序员面试金典>,这里做一个目录方便大家查找.另外有本人的LeetCode解题目录.<剑指Offer>解题目录.LintCode代码能力测试CA ...

最新文章

  1. HTML5 Canvas 绘制库存变化折线 增加超储告罄线
  2. CommonJS,AMD,CMD,ES6,require 和 import 详解
  3. 解决微信小程序新建项目没有样式问题,以及官方demo
  4. 廖雪峰JS教程--条件判断
  5. 排除MySQL中常见错误的实用招术
  6. Linux shell配置环境变量
  7. 你绝对猜不到 Java 14 有什么新特性?
  8. uint8_t范围_uint8_t / uint16_t / uint32_t /uint64_t 是什么数据类型 - 大总结
  9. 金句: 對比MBA學位,我們更需要PSD學位的人! Poor, Smart and Deep Desire to… | consilient_lollapalooza on Xanga...
  10. Browsers简介
  11. 做直播能有多赚钱,Python告诉你
  12. 海思3518ev200视频录制到TF卡,关于循环覆盖存储的问题。
  13. jquery 监听input输入停止,实现文本框自动跳转
  14. wxPython in Action (wx.ListBox)
  15. 二、数据集与数据类型【R与统计】
  16. 动态规划------走楼梯问题
  17. c语言 宏定义swap函数,C++ 用宏实现swap(a,b)
  18. 【矩阵论】8. 常用矩阵总结——秩1矩阵,优阵(单位正交阵),Hermite阵
  19. 诺基亚的复活之路:夹缝中求生存
  20. Wex5+海康摄像头+cordova封装 实现NVR对接视频在线监控

热门文章

  1. silverlight项目工作小结
  2. ModuleNotFoundError: No module named ‘torchversion‘
  3. 数据结构上机实践第14周项目1(3) - 验证算法(二叉排序树)
  4. python数字组合算法_python猜数字游戏快速求解解决方案
  5. 图片服务器 文件系统,调研分享:图片文件在各文件系统上的访问性能对比
  6. python2打印字符串_Python 3基础教程2-打印语句和字符串
  7. php验证码显示碎图片,我的验证码只显示破碎的小图片
  8. java金字塔程序_Java中的金字塔模式程序
  9. java8foreach_Java forEach – Java 8 forEach
  10. mongodb示例_MongoDB findAndModify()示例