精华内容
下载资源
问答
  • 其他一些对数组或哈希表有用函数包括sort(),next(),prev()和each()。 对象 使用new语句产生一个对象: class foo { function do_foo () { echo "Doing foo."; } } $bar = new foo; $bar->do_foo(); 改变变量...
  • 重复数组中二分查找

    千次阅读 2017-07-13 10:05:21
    问题:给定任意自然数,对数组进行二分查找,返回数组正确的位置,给出函数实现。注:连续相同的数字,返回第一个匹配位置还是最后一个匹配位置,由函数传入参数决定。 文章链接:http://hedengcheng.com/?p=595...

    在何大神的博客看到一篇关于重复数据二分查找的题目。描述如下:

    给定一个升序排列的自然数数组,数组中包含重复数字,例如:[1,2,2,3,4,4,4,5,6,7,7]。问题:给定任意自然数,对数组进行二分查找,返回数组正确的位置,给出函数实现。注:连续相同的数字,返回第一个匹配位置还是最后一个匹配位置,由函数传入参数决定。
    文章链接:http://hedengcheng.com/?p=595

    下面是自己给出的一种实现,代码写的有点啰嗦,应该还有可以优化的地方。

    //java语言描述
    public class BinarySearch {
        public static void main(String[] args) {
            int[] tmp = {1,2,2,3,4,4,4,5,6,7,7};
            int target = 7;
            int result = BinarySearch.makeSearchLoop(target, tmp, 1);
            System.out.println(result);
        }
        public static int makeSearchLoop(int target,int[] arr,int tag) {
             if(arr.length == 0) {
                 return -1;
             }
             int left=0,right=arr.length-1;
             while(left+1<right) {
                 int mid = (left+right)/2;
                 if(target > arr[mid]) {
                     left = mid+1;
                 }
                 if(target < arr[mid]) {
                     right = mid-1;
                 }
                 if(target == arr[mid] && tag == 0) {
                     right = mid;
                 }
                 if(target == arr[mid] && tag == 1) {
                     left = mid;
                 }
             }
             if(arr[left]==arr[right] && arr[right]==target) {
                 return left+tag;
             }
             if(arr[left] == target) {
                 return left;
             }
             if(arr[right] == target) {
                 return right;
             }
             return -1;
        }
    }

    非重复数据中的二分查找,在target == arr[mid]之后就可以return mid了。但既然是包含重复数据的数组,mid的位置就可能是其中的某一个。
    题目要求tag为0时返回最前面的位置,tag为1时返回最后面的位置。因此我们在target == arr[mid]之后还需要再根据tag的值继续进行判断,如果tag=0,则要得到的位置应该<=mid;如果tag=1,则要得到的位置应该>=mid。由于我们直接将mid赋给了left(或right),最后会出现只剩left和right分别对应两个元素的情况,因此在循环之后,需要对left和right位置上的值进行判断,有些啰嗦~

    展开全文
  • excel使用

    2012-11-25 17:06:01
    从简单三角函数到复杂的对数、指数函数,都可以用EXCEL画出曲线。如果用得到,你还可以利用EXCEL来完成行列式、矩阵各种计算,进行简单积分运算,利用迭代求函数值(如x^2=x^7+4,可用迭代方法求x值),等等,...
  • 你必须知道495个C语言问题

    千次下载 热门讨论 2015-05-08 11:09:25
    不同编译器给出不同的i值,有的为3,有的为4,哪个是正确的? *3.4 有这样一个巧妙的表达式:a^=b^=a^=b;它不需要临时变量就可以交换a和b的值。 3.5 可否用显式括号来强制执行我所需要的计算顺序并控制相关的副...
  • 《你必须知道495个C语言问题》

    热门讨论 2010-03-20 16:41:18
    不同编译器给出不同的i值,有的为3,有的为4,哪个是正确的? 34  *3.4 有这样一个巧妙的表达式:a^= b^= a^= b; 它不需要临时变量就可以交换a和b的值。 34 3.5 可否用显式括号来强制执行我所需要的计算顺序并...
  • LINGO软件学习

    2009-08-08 22:36:50
    LINGO内置建模语言是一种描述性语言,用它可以描述现实世界中一些问题,然后再借助于LINGO求解器求解。因此,集属性值一旦在模型中被确定,就不可能再更改。在LINGO中,只有在初始部分中给出集属性值在以后...
  • 不同编译器给出不同的i值,有的为3,有的为4,哪个是正确的? 34  *3.4 有这样一个巧妙的表达式:a^= b^= a^= b; 它不需要临时变量就可以交换a和b的值。 34 3.5 可否用显式括号来强制执行我所需要的计算顺序并...
  • C#数据结构

    2013-12-10 11:49:54
    刚学程序设计时,常听人说程序设计水平要想提高,最重要的是多看别人写的程 序,多去思考问题。从别人写的程序中,我们可以发现效率更高的解决方法;从 思考问题的过程中,我们可以了解解决问题的方法常常不只一个。...
  • /*pa指向a[2],即pa值为&pa[2]*/ 指针变量加减运算只能对数组指针变量进行, 对指向其它类型变量指针变量作加减运算是毫无意义。(3)两个指针变量之间运算只有指向同一数组两个指针变量之间才能进行运算...
  • 1.对于二叉排序树,下面的说法( )是正确的。 A.二叉排序树是动态树表,查找不成功时插入新结点时,会引起树的重新分裂和组合 B.对二叉排序树进行层序遍历可得到有序序列 C.用逐点插入法构造二叉排序树时,若...
  • 大话数据结构

    2018-12-14 16:02:18
    理解大o推导不算难,难的其实是对数列的一些相关运算,这考察的更多的是数学知识和能力。 2.9.1算法时间复杂度定义 29 2.9.2推导大o阶方法 30 2.9.3常数阶 30 2.9.4线性阶 31 2.9.5对数阶 32 2.9.6平方阶 32 ...
  • 首先关闭的是最早的连接,除非使用了“ ip tcp intercept drop-mode random”命令。当所设置的门槛值被超时时,路由器进行下面的动作: 1) 每一个新的连接导致一个最早的(或随机的)连接被删除。 2) 初始的重...
  • 对数组进行引用,就产生了一个切片&arr”, 2.6.7 第一行 “rust 提供了原始字符串类型 str,也叫做字符串切片” 我觉得既然切片和引用类型不一样,混淆使用这两个可能会对新手造成...
  • 1.写出判断ABCD四个表达式是否正确, 若正确, 写出经过表达式中 a值(3分) int a = 4; (A)a += (a++); (B) a += (++a) ;(C) (a++) += a;(D) (++a) += (a++); a = ? 答:C错误,左侧不是一个有效变量,不能赋值,可...
  • //对数组的分析 } 下面对三个主要函数进行分析,文件位置在 common/function.php里面: GET函数: function get($sUrl,$aGetParam){ global $aConfig; //全局参数 $oCurl = curl_init(); //初始化curl if...
  • 德力西产品说明.pdf

    2019-10-10 18:41:58
    正确的使用可能会造成变频器运行不正常、发生故障或降低使用寿命,乃至发生人身伤害事故。因此使用前应认真阅读本说明书,严格按说明使用。本手册为标准附件,务必请您阅读后妥善保管,以备今后对变频器进行检修和...

空空如也

空空如也

1 2
收藏数 29
精华内容 11
关键字:

下面对数组描述正确的是