`

数组的几个算法

 
阅读更多
原文地址:http://hi.baidu.com/hell74111/blog/item/da1b3bf5022c6cd7f3d38544.html

求数组中出现次数超过一半的元素

给定一个n个整型元素的数组a,其中有一个元素出现次数超过n / 2,求这个元素。据说是百度的一道题
分析

设置一个当前值和当前值的计数器,初始化当前值为数组首元素,计数器值为1,然后从第二个元素开始遍历整个数组,对于每个被遍历到的值a[i]

1 如果a[i]==currentValue,则计数器值加1

2 如果a[i] != currentValue, 则计数器值减1,如果计数器值小于0,则更新当前值为a[i],并将计数器值重置为1

// 找出数组中出现次数超过一半的元素
int Find(int* a, int n)
{    
    int curValue = a[0] ; 
    int count = 1 ;   
    for (int i = 1; i < n; ++i)   
    {       
        if (a[i] == curValue)    
            count++ ;      
        else      
        {          
            count-- ;      
            if (count < 0)    
            {               
                curValue = a[i] ;   
                count = 1 ;        
            }      
        }    
    }    
    return curValue ;
}


分享到:
评论

相关推荐

    纯数数组去重复算法1千万3秒

    这个算法的性能特点是不受数据重复数量的影响,无论是1千万个还是1亿个重复元素,执行时间基本保持不变,展示了良好的线性时间复杂度特性。 描述中提到的“纯易代码”意味着算法的实现简洁明了,易于理解和执行。...

    对象数组元素筛选算法

    针对对象数组的重复元素筛选,我们可以采用以下几种策略: - **深度优先遍历**:从根节点开始,逐层向下访问子对象,直到最底层的叶子节点。 - **哈希表辅助去重**:使用哈希表存储已访问过的对象的关键属性值组合...

    数组排序算法

    归并排序也是一种分治算法,将数组递归地分成两半,对每一半进行排序,然后合并两个有序的子数组。对于给定数组,过程如下: 1. 将数组分为 {2, 1, 4} 和 {5, 3} 两半。 2. 对每个半数组进行归并排序,得到 {1, 2} ...

    2019js数组前端经典算法面试题.docx

    本篇文章将详细探讨文档中提及的几个经典的JavaScript数组算法面试题。 首先,我们来看第一个问题:求斐波那契数列的前20个数字。斐波那契数列是一个序列,其中每个数字是前两个数字的和。数学上,它可以通过递归...

    易语言数组排序算法集合

    快速排序是基于分治策略的排序算法,通过选择一个基准元素,将数组分为小于和大于基准的两部分,然后递归地对这两部分进行快速排序。 这些排序算法各有优缺点,适用于不同的数据场景。易语言数组排序算法集合中的...

    C语言中数组的排序算法.rar

    在`排序算法-交换法.c`文件中,通常包含一个基准元素的选取和分区过程,将数组分为小于基准和大于基准两部分,然后递归地对这两部分进行排序。 4. **插入法排序(Insertion Sort)** 插入法将元素逐个插入到已排序的...

    数组的应用算法十字链表法

    在本实验中,有以下几个主要的知识点: 1. **十字链表的建立**:首先,通过用户输入获取矩阵的行数、列数和非零元素个数。然后,初始化一个辅助数组hd,用于存储每一行和每一列的头结点。接着,创建总头结点H,并将...

    后缀数组创建算法的实现

    这一过程通常使用基数排序(Radix Sort),首先对每个字符串的前几位进行排序,如果还无法确定最终顺序,则将当前的排序结果作为新的输入递归处理。 - **示例**:以字符串S="mississippi"为例,选取所有起始位置...

    用C语言数组实现的软件FIFO V1.1更新先前的算法

    V1.1版本对V1.0的优化主要体现在以下几个方面: 1. **算法优化**:根据描述,开发者在研究了UC/OS(一个实时操作系统内核)的FIFO算法后,对原有的实现进行了改进。这可能意味着采用了更高效的数据结构或者操作方法...

    c语言的基本算法 数组排序

    数组排序算法在C语言中有着广泛的应用,不仅限于上述的几种方法。其他常见的排序算法还包括冒泡排序、插入排序、快速排序、归并排序等,每种都有其适用的场景和优缺点。在实际编程中,根据数据规模、稳定性、空间...

    php数组冒泡排序算法实例

    这个算法的名字由来是因为越小的元素会经过交换慢慢“浮”到数列的顶端,就像水中的气泡最终会上浮到水面一样。 在PHP中实现冒泡排序,主要涉及到以下几个关键点: 1. **初始化数组**: 示例代码中定义了一个名为...

    Java 数组递归算法的复杂度

    ### Java 数组递归算法的复杂度 #### 内容概览 本文主要探讨了Java中几种常见的排序算法(冒泡排序、选择排序、插入排序、希尔排序)以及递归算法的时间复杂度分析。通过具体代码示例和理论分析,帮助读者理解不同...

    Arry查重_数组_labview_查重_

    同时,查重算法的设计需要考虑到性能,尤其是当处理大型数组时,可能会涉及到内存管理和效率优化。 在“Arry查重”这个项目中,可能包含了一个完成以上步骤的VI,通过拖放LabVIEW的内置函数和结构,组合成一个...

    C语言中数组常用的排序算法

    它首先将数组分成几个子数组,对每个子数组进行插入排序,然后再逐步缩小子数组的长度,直到最终变为1,此时整个数组就是有序的了。 **算法步骤:** 1. **初始化:** 定义一个增量序列t1, t2, …, tk, 其中ti &gt; tj, ...

    C#中各种数组的性能比较

    锯齿数组由多个一维数组组成,每个一维数组可以有不同长度。这种结构非常适合于表示具有可变长度子列表的数据集合。例如: ```csharp int[][] arr = new int[5][]; arr[0] = new int[3]; arr[1] = new int[4]; arr...

    C语言求最大子数组的算法探析.pdf

    在算法领域,对于特定问题,如在一个整数数组中找到具有最大和的连续子数组,存在多种不同的算法实现策略。本篇文章探讨了穷举法(暴力法)、分治法、分析法以及动态规划法等几种算法。 穷举法(暴力法)是最直观的...

    将一个数组的所有元素排序后输出

    在我们的程序中,我们还使用了几个重要的指令,包括lea、mov、add、loop等。lea指令用于将数组的首地址传递给寄存器,mov指令用于将数据传递给寄存器,add指令用于将寄存器的值增加或减少,loop指令用于控制循环的...

    几个算法的实现和算法作业

    在本压缩包中,我们可以看到一个名为"几个算法实现"的文件,这通常包含了一些常见的算法设计和实现,使用C++编程语言编写,并且带有注释。这些算法是计算机科学和信息技术领域的基础,对于理解和解决各种计算问题至...

Global site tag (gtag.js) - Google Analytics