当前位置: 首页 > news >正文

魔术索引

题目描述
在数组A[0..n-1]中,有所谓的魔术索引,满足条件A[i]=i。给定一个升序数组,元素值各不相同,编写一个方法,判断在数组A中是否存在魔术索引。请思考一种复杂度优于o(n)的方法。

给定一个int数组A和int n代表数组大小,请返回一个bool,代表是否存在魔术索引。

测试样例:
[1,2,3,4,5]
返回:false

在不考虑负数的情况下, 如果index i 为魔术索引,那么它之前的位置肯定也都是魔术索引,且对于任何一个位置 A[i]只能大于等于i。 用二分法,判断mid位置是否是魔术索引,如果是返回true,如果不是在左边继续寻找魔术索引。

import java.util.*;

public class MagicIndex {
    public boolean findMagicIndex(int[] A, int n) {
        // write code here
        return find(A, n, 0, A.length-1);
    }
    
    public boolean find(int [] A, int n, int left, int right){
        if(left > right)
            return false;
        int mid = (left+right)/2;
        if(A[mid]==mid)
            return true;
       
        return find(A, n, left, mid-1);
        
    }
}
题目描述
在数组A[0..n-1]中,有所谓的魔术索引,满足条件A[i]=i。给定一个不下降序列,元素值可能相同,编写一个方法,判断在数组A中是否存在魔术索引。请思考一种复杂度优于o(n)的方法。

给定一个int数组A和int n代表数组大小,请返回一个bool,代表是否存在魔术索引。

测试样例:
[1,1,3,4,5]
返回:true

当A[i] < i 时, 左边右边都有可能 A[i]>i 时,只有左边有可能出现

import java.util.*;

public class MagicIndex {
    public boolean findMagicIndex(int[] A, int n) {
        // write code here
        return find(A, n, 0, A.length-1);
    }
    public boolean find(int[] A, int n, int left, int right){
        if(left>right)
            return false;
        int mid = left + (right-left)/2;
        if(A[mid]==mid)
            return true;
        else if(A[mid]>mid){
            return find(A, n, left, mid-1);
        }
        return find(A, n, left, mid-1) || find(A, n, mid+1, right);
        
    }
}

相关文章:

  • PIC数据采集系统---接口功能测试
  • 字符串排列
  • 数组中的逆序对
  • Windows 8 应用商店应用开发 之 氛围光传感器
  • 子串判断
  • arm汇编程序中的[|]
  • 实时中位数
  • 【spring】IllegalArgumentException Can not set field to $Proxy 在spring中使用事物或AOP遇到的错误...
  • 约瑟夫问题
  • C#实现UDP分包组包
  • tomcat 集群搭建
  • 善变的同伴
  • IDC:PC 今年第一季度出货量继续下滑趋势,比起去年同期跌了13.9%
  • 非递归中序,后序遍历二叉树
  • Eclipse安装aptana
  • 【css3】浏览器内核及其兼容性
  • 【前端学习】-粗谈选择器
  • Android Studio:GIT提交项目到远程仓库
  • canvas 绘制双线技巧
  • JAVA SE 6 GC调优笔记
  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • Python3爬取英雄联盟英雄皮肤大图
  • Python利用正则抓取网页内容保存到本地
  • TypeScript迭代器
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
  • 聊聊sentinel的DegradeSlot
  • 前端学习笔记之观察者模式
  • 通信类
  • 学习Vue.js的五个小例子
  • const的用法,特别是用在函数前面与后面的区别
  • ​ssh免密码登录设置及问题总结
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • #includecmath
  • #include到底该写在哪
  • (007)XHTML文档之标题——h1~h6
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (转)创业家杂志:UCWEB天使第一步
  • (转)一些感悟
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .NET Core MongoDB数据仓储和工作单元模式封装
  • .NET建议使用的大小写命名原则
  • /bin/rm: 参数列表过长"的解决办法
  • ::
  • @EnableAsync和@Async开始异步任务支持
  • @property python知乎_Python3基础之:property
  • @Transactional注解下,循环取序列的值,但得到的值都相同的问题
  • @拔赤:Web前端开发十日谈
  • [ C++ ] STL---仿函数与priority_queue
  • [ai笔记9] openAI Sora技术文档引用文献汇总
  • [Android 13]Input系列--获取触摸窗口
  • [Android View] 可绘制形状 (Shape Xml)
  • [BZOJ 4034][HAOI2015]T2 [树链剖分]