首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    寻找大小为n的数组中出现次数超过n/2的那个数

    问题描述: 在一个大小为n的数组中,其中有一个数出现的次数超过n/2,求出这个数。这题看似很简单,但是找到最优解不容易,一般情况我们首先想到最笨的方法,每选一个数,遍历一次数组,复杂度O(N^2),或者先排序再找那个数,复杂度一般为O(NlgN),或者用hash,时间复杂度O(N),空间复杂度需要看输入的数据规模,空间复杂度O(N)。所以这些都不是最优解,我们先分析一下这个题目,设该数出现的次数为x,则x满足,n/2+1<= x <=n;所以我们可以想到如果该数和其余的数全部相抵消的话,至少还剩1个,我们从前往后遍历,设key为第一个数,key出现的次数为ntime,初始化为1,代表key出现了一次,从前往后,如果某个数不等于key,则他俩抵消,key的出现次数减一,如果等于key,则key的出现次数加1,如果key的出现次数变成了0,则说明key已经用完了,所以需要重新初始化key为另一个数,再重复以上步骤,因为一定有一个数大于n/2,所以遍历到最后剩下的那个数,就是要求的数。

    02

    STL(标准模板库)

    STL提供了一组表示容器 迭代器 函数对象 和算法的模板。容器是一个与数组类似的单元,可以存储若干个值。STL容器是同质的,即存储的值的类型相同;算法是完成特定任务(如对数组进行排序 又或 在链表中查找特定值)的处方;迭代器能够用来遍历容器的对象,与能够遍历数组的指针类似,是广义指针;函数对象是类似函数的对象,可以是类对象或函数指针。STL使得能够构造各种容器(数组 队列 链表等)和执行各种操作(包括搜索 排序和随机排列) STL并不是面向对象的编程,而是一种不同的编程模式-泛型编程,当然我们用一言两句可能说不清,我们可以通过一些实际应用真是了解到容器 迭代器 算法等

    02
    领券