的N数组,用怎样的方法可以使数组查找的时间复杂度度最低

当前位置: >
若要求对大小为n的数组进行排序的时间复杂度为O(nlog2n),且是稳定的(即如果待排序的序列中两个数据元素具有相同的值,在排序前后它们的相对位置不变),则可选择的排序方法是(& )。A.快速排序 B.归并排序 C.堆排序 D.冒泡排序
所属学科:
试题类型:客观题
所属知识点:
试题分数:1.0 分
用户编号:8330410笔记时间: 08:48
笔记内容:本笔记为私密内容。
&&&&&&&&&&&&&&&希赛网 版权所有 & &&sponsored links
如何在O(n)的时间复杂度内找出数组中出现次数超过了一半的数
方法一:每次取出两个不同的数,剩下的数字中重复出现次数超过一半的数字肯定,将规模缩小化。如果每次删除两个不同的数,这里当然不是真的把它们踢出数组,而是对于候选数来说,出现次数减一,对于其他数来说,循环遍历就行。在剩余的数字里,原最高频数出现的频率一样超过了50%,不断重复这个过程,最后剩下的将全是同样的数字,即最高频数。此算法避免了排序,时间复杂度只有O(n).
程序示例如下:
#include "stdafx.h"
#include &stdio.h&
int FindMostApperse(int* num, int len)
int candidate = 0;
int count = 0;
for (int i = 0; i & i++)
if (count == 0)
candidate = num[i];
count = 1;
if (candidate == num[i])
printf("num[%d]=%d,count=%d,candidate=%d\n", i, num[i], count, candidate);
int main()
int arr[] = { 2, 1, 1, 2, 3, 1, 1, 1 };
int len = sizeof(arr) / sizeof(arr[0]);
printf("%d\n", FindMostApperse(arr, len));
getchar();
  效果如图:
方法二:Hash法。首先创建一个hash_map,其中key为数组元素值,value为此数出现的次数。遍历一遍数组,用hash_map统计每个数出现的次数,并用两个值存储目前出现次数最多的数和对应出现的次数,此时的时间复杂度为O(n),空间复杂度为O(n),满足题目的要求。
方法三:原创,用map,不知时间复杂度是否符合要求,代码如下:
#include "stdafx.h"
#include &iostream&
#include &map&
bool findOverHalf(int *a, int size, int &val)
if (a == NULL
size &= 0)
map&int, int&
for (int i=0; i & i++)
m[a[i]]++;
if (m[a[i]]&size / 2)
val = a[i];
int main()
int val = 0;
int a[] = { 1, 5, 4, 3, 4, 4, 0, 5, 5, 5, 5 };
if (findOverHalf(a, 11, val))
cout && val &&
cout && "无出现次数过半的数" &&
getchar();
题目:数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字. 分析:这是一道广为流传的面试题,包括百度.微软和Google在内的多家公司都曾经采用过这个题目.要几十分钟的时间里很好地解答这道题,除了较好的编程能力之外,还需要较快的反应和较强的逻辑思维能力. 看到这道题,我们马上就会想到,要是这个数组是排序的数组就好了.如果是排序的数组,那么我们只 ...
简述 : 给定一个数组,找出数组中元素出现次数超过数组长度一半的元素 如数组: [4, 3, 2, 1, 1, 1, 1, 1, 1, 0 ] 其中超过一半的元素就是 1 两种实现的 算法描述: 1) 用快排中的Partition,分割数组直到找到pos等于数组正当中的那个元素,返回那个索引的值 2) 可以考虑成,结果的那个值对抗不等于结果的那个值,两方面打 ...
&?php /* * 算法要求:数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字. * * 算法分析:我们需要计算数组中每个数字的出现次数.在PHP中我们可以使用in_array函数 * 来判断一个元素是否出现在数组中.比如数组中含有1,2,3三个元素,我们要判断1是否存在 * 可以使用in_array(1,$array)来判断,但是这样只 ...
作者:陈太汉算法--找出数组中出现次数超过一半的数
每当我看到经典的算法题,就怀念高中,感觉很多算法题就是高中的题目,谁叫哥只读了个专科,高数基本相当没学.
有空要看看高数啊,想当年数学那是相当的......
第一个想到的方法是见一个二维数组,一维存数组中的数据,二维存这个数出现的次数.出现次 ...
算法--找出数组中出现次数超过一半的数
每当我看到经典的算法题,就怀念高中,感觉很多算法题就是高中的题目,谁叫哥只读了个专科,高数基本相当没学.
有空要看看高数啊,想当年数学那是相当的...... #include &iostream& class FindTheOne { publi ...查看: 7650|回复: 6
给定有n个元素的一维数组,建立一个有序单链表的最少时间复杂度是多少。
主题帖子积分
王道论坛初级道友, 积分 52, 距离下一级还需 148 积分
王道论坛初级道友, 积分 52, 距离下一级还需 148 积分
考研年份2012
报考学校北京航空航天大学
本科学校首都师范大学
给定有n个元素的一维数组,建立一个有序单链表的最少时间复杂度是多少。
主题帖子积分
王道论坛中级道友, 积分 543, 距离下一级还需 457 积分
王道论坛中级道友, 积分 543, 距离下一级还需 457 积分
考研年份2012
报考学校浙江大学
本科学校华北电力大学(保定)
O(nlogn)+O(n)
悉心浇灌,静待花开!
主题帖子积分
王道论坛新道友, 积分 0, 距离下一级还需 1 积分
王道论坛新道友, 积分 0, 距离下一级还需 1 积分
考研年份2012
报考学校中国科大
本科学校山东大学
我觉得最少的是O(N),因为若所给的一组数是有序的话就不用排序了,只需要建链表就行
主题帖子积分
王道论坛实习道友, 积分 19, 距离下一级还需 1 积分
王道论坛实习道友, 积分 19, 距离下一级还需 1 积分
考研年份2012
报考学校华南理工大学
本科学校广西民族大学
我也认为是o(n)
主题帖子积分
王道论坛初级道友, 积分 52, 距离下一级还需 148 积分
王道论坛初级道友, 积分 52, 距离下一级还需 148 积分
考研年份2012
报考学校北京航空航天大学
本科学校首都师范大学
& & 数组排序的最少时间复杂度是O(nlog2(n)),这个怎么算呀,能详细说明一下吗,谢谢。
主题帖子积分
王道论坛中级道友, 积分 543, 距离下一级还需 457 积分
王道论坛中级道友, 积分 543, 距离下一级还需 457 积分
考研年份2012
报考学校浙江大学
本科学校华北电力大学(保定)
建议LZ看看教材上对时间复杂度O(nlogn)的排序算法的相关分析吧
悉心浇灌,静待花开!
主题帖子积分
王道论坛初级道友, 积分 52, 距离下一级还需 148 积分
王道论坛初级道友, 积分 52, 距离下一级还需 148 积分
考研年份2012
报考学校北京航空航天大学
本科学校首都师范大学
& & 请问看哪本书呀 我怎么找不到呀。如何实行信用评级制度?_百度知道
如何实行信用评级制度?
我有更好的答案
西媒称,中国政府的计划是,以从全社会收集的信息作为大数据基础,在2020年前建立起社会信用体系。通过该体系,将能判断出全中国10多亿公民中哪些人是不可信之人。据西班牙《五日报》网站11月6日报道,从各种社交媒体上反映的日常生活现象可以看出,人们的行为和活动需要适当的控制。在网上购买的商品、亲友以及是否缴纳税款等信息,都会反映在社交媒体上。有人对个人的行为进行评价,标明哪些是正面行为,哪些是负面行为,并依据政府决定的标准给每个人打出一个分数。中国政府将要做的工作与这种事情差不多。这种机制将为每个公民打分,以便让全社会看看每个人是否诚实可信。这种分数将影响到一个人能否申请银行贷款、能否顺利找到工作、其子女能否进入理想的学校等。报道称,中国政府在介绍社会信用体系建设工作的文件中表示,将努力把诚信建设摆在突出位置,大力推进政务诚信、商务诚信、社会诚信和司法公信建设,建立健全覆盖全社会的征信系统,加大对失信行为惩戒力度,在全社会广泛形成“守信光荣、失信可耻”的氛围。报道称,法律和数字战略专家博尔哈·阿德苏亚拉评价说:“社会信用体系的巨大变化在于,现在已不需要对个人生活进行监控,因为人们会在网络上展示自己的生活。通过社交媒体,你几乎可以了解和跟踪一位精英人士的一切。我们现在生活在一个透明世界中。”
为您推荐:
其他类似问题
您可能关注的内容
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。}

我要回帖

更多关于 数组查询的时间复杂度 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信