zoukankan      html  css  js  c++  java
  • 面试金典--9.3

    题目描述:给定有序数组,要求找出A[i]=i的索引。(没有重复元素)

    简单粗暴的方法:遍历一遍(这里可以优化,若当前A[i] != i,但是A[i] > i,那么因为数组有序,所以后面的元素不可能满足条件,可以直接输出了,这个思想可以用到有重复元素的情况下)。

    二分递归法:比较A[mid]与mid的关系,等于则返回,小于说明左半部分不可能有满足的,同理右半部分。

     1 #include <iostream>
     2 #include <queue>
     3 #include <climits>
     4 #include <algorithm>
     5 #include <memory.h>
     6 #include <stdio.h>
     7 #include <ostream>
     8 #include <vector>
     9 #include <list>
    10 #include <cmath>
    11 #include <string>
    12 #include <stdexcept>
    13 #include <stack>
    14 using namespace std;
    15 
    16 int fun(int arrayP[],int n,int s,int e)
    17 {
    18     if(s < e || s < 0 || e >= n)
    19         return -1;
    20     int mid = (s+e)/2;
    21     if(arrayP[mid] == mid)
    22         return mid;
    23     else if(arrayP[mid] < mid)
    24         return fun(arrayP,n,mid+1,e);
    25     else
    26         return fun(arrayP,n,s,mid-1);
    27 }
    28 
    29 int main()
    30 {
    31     
    32     return 0;
    33 }

    如果有重复元素,就不能向这样去解了,必须考虑重复的问题,但是可以利用之前提到的思想进行优化,缩小左右部分遍历的范围。

    如,重复元素时,A[5] = 3,那么最多只能在0~3之间有了。

  • 相关阅读:
    转载--php函数使用--var_export
    ZkApi的方法跨域访问ZkResource的静态资源文件出现的问题
    修改html内联样式的方法
    linux下的npm安装
    爬虫之静态网页爬虫(基础知识)
    利用jQuery使用HTML的formdata属性实现文件上传
    细说form表单
    session
    cookie和session(会话跟踪)
    同源策略和跨域问题
  • 原文地址:https://www.cnblogs.com/cane/p/3795456.html
Copyright © 2011-2022 走看看