【本文链接】

http://www.cnblogs.com/hellogiser/p/binary-search-for-repeated-element.html

【题目】

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

【代码】

 C++ Code 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
 
/*
    version: 1.0
    author: hellogiser
    blog: http://www.cnblogs.com/hellogiser
    date: 2014/9/22
*/

#include "stdafx.h"
#include "iostream"
using namespace std;

enum MATCH_POS
{
    FIRST,
    LAST
};

int binary_search(int *a, int n, int value)
{
    )
        ;
    , mid;
    while(low <= high)
    {
        mid = low + (high - low) / ;
        if (value == a[mid])
        {
            return mid;
        }
        else if (value < a[mid])
        {
            high = mid - ;
        }
        else
        {
            low = mid + ;
        }
    }
    ;
}

int binary_search_2(int *a, int n, int value, MATCH_POS match)
{
    )
        ;
    , mid;
    //==========================
;
    //==========================
    while(low <= high)
    {
        //==========================
        count ++;
        //==========================
;
        if (value == a[mid])
        {
            if (match == FIRST)
            {
                ] == a[mid])
                {
                    high = mid - ;
                }
                else
                {
                    //==========================
                    cout << "count = " << count << endl;
                    //==========================
                    return mid;
                }
            }
            else if (match == LAST)
            {
                ] == a[mid])
                {
                    low = mid + ;
                }
                else
                {
                    //==========================
                    cout << "count = " << count << endl;
                    //==========================
                    return mid;
                }
            }
        }
        else if (value < a[mid])
        {
            high = mid - ;
        }
        else
        {
            low = mid + ;
        }
    }
    ;
}

void test_base2()
{
    };
    ; i++)
    {
        cout << binary_search_2(a, , a[i], FIRST) << endl;
        cout << binary_search_2(a, , a[i], LAST) << endl;
    }

cout << "=================================" << endl;
    };
    ; i++)
    {
        cout << binary_search_2(a2, , a2[i], FIRST) << endl;
        cout << binary_search_2(a2, , a2[i], LAST) << endl;
    }

cout << "=================================" << endl;
    };
    cout << binary_search_2(a3, , FIRST) << endl;
    cout << binary_search_2(a3, , LAST) << endl;
}

void test_main()
{
    test_base2();
}

int main(void)
{
    test_main();
    ;
}

由此可知,如果数组有1024个重复元素0,那么查找任然是只需要10次即可。

【参考】

http://hedengcheng.com/?p=595

http://www.cnblogs.com/sooner/p/3279429.html

76 binary_search 查找重复元素的更多相关文章

  1. Python笔记(二)查找重复元素

    一.查找数列重复元素---count() >>> list = [,,,,,,,,,,,] >>> set = set(list) >>> for ...

  2. xml文件查找重复元素(超简单版)

    使用WPS,新建一个表格文件,将xml拖入表格,点数据,选中存在重复项的列,点高亮重复项,OK.

  3. Java查找数组重复元素,并打印重复元素、重复次数、重复元素位置

    面试题查找重复元素并打印重复次数和重复位置,一顿懵逼,回来死磕写下来,打印指定重复次数和最大次数,其他在此基础上可以再更新 package sort; import org.testng.annota ...

  4. JS数组常用函数以及查找数组中是否有重复元素的三种常用方法

    阅读目录: DS01:常用的查找数组中是否有重复元素的三种方法 DS02:常用的JS函数集锦 DS01.常用的查找数组中是否有重复元素的三种方法  1. var ary = new Array(&qu ...

  5. 查找出现次数大于n/k的重复元素

    本文是对一篇英文论文的总结:Finding Repeated Elements.想看原文,请Google之. 这个问题的简单形式是“查找出现次数大于n/2的重复元素”.我们先从简单问题开始,然后再做扩 ...

  6. Java-Runoob-高级教程-实例-数组:10. Java 实例 – 查找数组中的重复元素-un

    ylbtech-Java-Runoob-高级教程-实例-数组:10. Java 实例 – 查找数组中的重复元素 1.返回顶部 1. Java 实例 - 查找数组中的重复元素  Java 实例 以下实例 ...

  7. 如何在python列表中查找某个元素的索引

    如何在python列表中查找某个元素的索引 2019-03-15 百度上回复别人的问题,几种方式的回答: 1) print('*'*15,'想找出里面有重复数据的索引值','*'*15) listA ...

  8. 74 使用BitSet输出数组中的重复元素

    [本文链接] http://www.cnblogs.com/hellogiser/p/using-bitset-to-print-duplicate-elements-of-array.html [题 ...

  9. Java中ArrayList问题:删除一个ArrayList中的重复元素,注意留意一个问题

    该问题有两种方法: 一 利用两个数组,此法简单,不讨论 二 利用一个数组,从第0个开始依次取元素,并在其后元素中查找是否有该元素,有则删掉后面的重复元素,依次遍历.---但是这种情况要特别注意,当后续 ...

随机推荐

  1. JS的splice()方法和slice()方法

    在w3c school中描述如下: 定义和用法splice() 方法用于插入.删除或替换数组的元素.语法arrayObject.splice(index,howmany,element1,....., ...

  2. Java继承和多态实例

    我们知道面向对象的三大特性是封装.继承和多态.然而我们有时候总是搞不清楚这些概念.下面对这些概念进行整理, 为以后面向抽象的编程打下坚实的基础. 封装的概念还是很容易理解的.如果你会定义类,那么相信你 ...

  3. 弹出框四 之toastr.js (完成提示框)

    1.下载 toastr.js组件 2. $(function () { toastr.success('提交数据成功'); toastr.error('Error'); toastr.warning( ...

  4. 一个漂亮的php验证码类(分享)

    直接上代码: 复制代码 代码如下: //验证码类class ValidateCode { private $charset = 'abcdefghkmnprstuvwxyzABCDEFGHKMNPRS ...

  5. 有关Highchart的那些事。。。备份一段(稍后修改)

    $(function () { $('#CurrentFinanceChart').highcharts({ title: { text: '' }, xAxis: { type: 'datetime ...

  6. [译]我是怎么构建Node.js程序的

    原文: http://blog.ragingflame.co.za/2015/4/1/how-i-build-nodejs-applications "保持简单, 保持模块化." ...

  7. 【AngularJS】—— 6基于AngularJS的过滤与排序

        阅读目录 程序设计分析 代码以及结果 前面了解了AngularJS的使用方法,这里就简单的写个小程序,实现查询过滤以及排序的功能. 本程序中可以了解到: 1 angularjs的过滤器 2 n ...

  8. 【PHP面向对象(OOP)编程入门教程】8.构造方法__construct()与析构方法__destruct()

    大多数类都有一种称为构造函数的特殊方法.当创建一个对象时,它将自动调用构造函数,也就是使用new这个关键字来实例化对象的时候自动调用构造方法.构 造函数的声明与其它操作的声明一样,只是其名称必须是__ ...

  9. InnoDB为什么要使用auto_Increment

    在Mysql表设计中,通常会使用一个与业务无关的自增列做为主键.这是因为Mysql默认使用B-Tree索引,你可以简单理解为"排好序的快速查找结构".如下是一个B-Tree的结构图 ...

  10. HomeWork2

    程序一: 1 public intfindLast(int[] x, inty) { 2 //Effects: If x==null throw NullPointerException 3 // e ...