首页
学习
活动
专区
圈层
工具
发布

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

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

84520

面试官:判断一个数是否为2的整数次幂

第二种考虑(除法) 2的整数次幂都能被2整除,所以进入一个循环,让目标对2求余,如果有余数,则目标不是2的整数次幂,如果没有余数,然后目标赋值为目标除以2,直到目标小于1,当目标小于1的时候则说明明目标是...比如:18 18%2=0;18被2整除 18/2=9;目标赋值为9 9%2=1;9没被2整除退出循环,说明18不是2的整数幂。...如果目标整数的大小是n,则此方法循环次数有可能是1,2,3,4,...logn次。...第三种考虑(位运算) 让我们看看2的整数次幂转成二进制是什么样的 十进制 二进制 是否为2的整数次幂 8 1000 是 16 10000 是 32 100000 是 64 1000000 是 100 1100100...代码如下: public static boolean is2Power3(int num) { return (num & num - 1) == 0; } 是不是很简单,只要动用所学过的知识点

1.5K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    2021-08-26:长度为N的数组arr,一定可以组成N^2个数字对。例如arr = ,数字对有(3,3) (3

    2021-08-26:长度为N的数组arr,一定可以组成N^2个数字对。...例如arr = [3,1,2],数字对有(3,3) (3,1) (3,2) (1,3) (1,1) (1,2) (2,3) (2,1) (2,2),也就是任意两个数都可以,而且自己和自己也算数字对,数字对怎么排序...第一维数据从小到大;第一维数据一样的,第二维数组也从小到大,所以上面的数值对排序的结果为:(1,1)(1,2)(1,3)(2,1)(2,2)(2,3)(3,1)(3,2)(3,3)。...给定一个数组arr,和整数k,返回第k小的数值对。 福大大 答案2021-08-26: 1.暴力解。 时间复杂度:(N^2 * log(N^2)). 2.下标定位+bfprt算法。 2.1.k--。...2.2.定位下标i1和i2。 i1=k/N。 i2=k%N。 2.3.根据bfprt算法求出第i1小和第i2小的数。 时间复杂度:O(N)。 空间复杂度:O(1)。arr数组里的元素顺序会发生变化。

    45940

    2021-08-26:长度为N的数组arr,一定可以组成N^2个数字

    2021-08-26:长度为N的数组arr,一定可以组成N^2个数字对。...例如arr = 3,1,2,数字对有(3,3) (3,1) (3,2) (1,3) (1,1) (1,2) (2,3) (2,1) (2,2),也就是任意两个数都可以,而且自己和自己也算数字对,数字对怎么排序...第一维数据从小到大;第一维数据一样的,第二维数组也从小到大,所以上面的数值对排序的结果为:(1,1)(1,2)(1,3)(2,1)(2,2)(2,3)(3,1)(3,2)(3,3)。...给定一个数组arr,和整数k,返回第k小的数值对。 福大大 答案2021-08-26: 1.暴力解。 时间复杂度:(N^2 * log(N^2)). 2.下标定位+bfprt算法。 2.1.k--。...2.2.定位下标i1和i2。 i1=k/N。 i2=k%N。 2.3.根据bfprt算法求出第i1小和第i2小的数。 时间复杂度:O(N)。 空间复杂度:O(1)。arr数组里的元素顺序会发生变化。

    62510

    大厂面试题分享:如何让(a===1&&a===2&&a===3)的值为true?

    当我第一次看到这一题目的时候,我是比较震惊的,分析了下很不合我们编程的常理,并认为不大可能,变量a要在同一情况下要同时等于1,2和3这三个值,这是天方夜谭吧,不亚于哥德巴赫1+1=1的猜想吧,不过一切皆有可能...我的思路来源于更早前遇到的另外一题相似的面试题: // 设置一个函数输出一下的值 f(1) = 1; f(1)(2) = 2; f(1)(2)(3) = 6; 当时的解决办法是使用toString或者valueOf...当然下面这题原理其实也是一样的,附上解法: // 设置一个函数输出一下的值 f(1) = 1; f(1)(2) = 2; f(1)(2)(3) = 6; function f() { let args...(3)); // 6 当然还没有结束,这里还会有一些特别的解法,其实在使用对象的时候,如果对象是一个数组的话,那么上面的逻辑还是会成立,但此时的toString()会变成隐式调用join()方法,换句话说...; } 我们的探寻之路还没结束,细心的同学会发现我们题目是如何让(a===1&&a===2&&a===3)的值为 true,但是上面都是讨论宽松相等==的情况,在严格相等===的情况下,上面的结果会不同吗

    1.1K20

    初识JAVA:华为面试写一个程序:要求出用1,2,5这三个数不同个数组合的和为100的组合个数

    要求出用1,2,5这三个数不同个数组合的和为100的组合个数 因为x+2y+5z=100 所以x+2y=100-5z,且z<=20 x<=100 y<=50 所以(x+2y)的可能值如下: z=0, x=100, 98, 96, … 0 z=1, x=95, 93, …, 1 z=2, x=90, 88, …, 0 z=3, x=85, 83, …..., 1 z=4, x=80, 78, …, 0 … z=19, x=5, 3, 1 z=20, x=0 因此,组合总数为100以内的偶数+95以内的奇数+90以内的偶数+…+5以内的奇数+1,...即为: (51+48)+(46+43)+(41+38)+(36+33)+(31+28)+(26+23)+(21+18)+(16+13)+(11+8)+(6+3)+1** 某个偶数m以内的偶数个数(包括...0)可以表示为m/2+1=(m+2)/2 某个奇数m以内的奇数个数也可以表示为(m+2)/2 import java.util.zip.DeflaterOutputStream; /** * Created

    64430

    华为面试题:写一个程序要求出用1,2,5这三个数不同个数组合的和为100的组合个数(Java实现)

    因为x+2y+5z=100 所以x+2y=100-5z,且z<=20 x<=100 y<=50 所以(x+2y)<=100,且(x+5z)是偶数 对z作循环,求x的可能值如下: z=0, x=100,...98, 96, … 0 z=1, x=95, 93, …, 1 z=2, x=90, 88, …, 0 z=3, x=85, 83, …, 1 z=4, x=80, 78, …, 0 …...z=19, x=5, 3, 1 z=20, x=0 因此,组合总数为100以内的偶数+95以内的奇数+90以内的偶数+…+5以内的奇数+1, 即为: (51+48)+(46+43)+(41+38)...+(36+33)+(31+28)+(26+23)+(21+18)+(16+13)+(11+8)+(6+3)+1 某个偶数m以内的偶数个数(包括0)可以表示为m/2+1=(m+2)/2 某个奇数m以内的奇数个数也可以表示为...(m+2)/2 import java.util.zip.DeflaterOutputStream; /** * Created by ${wuyupku} on 2019/3/18 22:29

    1.3K30

    谷歌多模态大模型PaLI:采用参数量为4B的ViT-e,效果超过BEiT-3

    在视觉方面,除复用 2B 参数 ViT-G 模型外,作者还训练了拥有 4B 参数的模型 ViT-e("enormous")。...作者通过将多个图像和 (或) 语言任务转换为广义的类似 VQA 的任务,实现它们之间的知识共享。使用 “image+query to answer” 来构建所有任务,其中检索和回答都表示为文本标记。...PaLI 在 VQAv2 上使用类似 Flamingo 的开放词汇文本生成的设置达到 84.3% 的最新 SOTA,该结果甚至优于在固定词汇分类环境中评估的模型,例如 CoCa、SimVLM、BEiT-...3。...由于所有任务都使用相同的模型执行,即没有任务特定的参数,因此使用基于文本的提示指导模型需要执行的任务。 图 2 展示了模型架构的高阶示意图。

    1.1K10

    智源发布「悟道2.0」巨模型,中国首个万亿模型参数为GPT-3的10倍

    从1750 亿参数量的 GPT-3,到万亿级别的Switch Transformer,参数量的记录在不断刷新。但是,中文作为世界语言的最大使用语言,却没有以其为核心的超大规模预训练模型。...智源研究院自 2020 年 10 月正式启动超大规模智能模型「悟道」项目,3月2号就发布了中国首个超大规模的智能模型「悟道1.0」,取得了多项领域的领先突破。...参数越大,意味着越强的通用人工智能潜能。...悟道2.0巨模型打破了之前由OpenAI的GPT-3预训练模型创造的1750亿参数规模,是GPT-3的十倍,再次突破了人们对大模型的想象。 ...Bengio以深度学习「圣经」花书Deep learning为题材,介绍了机器学习的基础知识,以及从学术观点出发的学习深度学习所必需的应用数学知识。

    1.3K10

    2021-07-27:给定一个数组arr,长度为N,arr中的值只有1,2,3三种。arr == 1,代表汉诺塔问题中,从

    2021-07-27:给定一个数组arr,长度为N,arr中的值只有1,2,3三种。...arr[i] == 1,代表汉诺塔问题中,从上往下第i个圆盘目前在左;arr[i] == 2,代表汉诺塔问题中,从上往下第i个圆盘目前在中;arr[i] == 3,代表汉诺塔问题中,从上往下第i个圆盘目前在右...那么arr整体就代表汉诺塔游戏过程中的一个状况。如果这个状况不是汉诺塔最优解运动过程中的状况,返回-1。如果这个状况是汉诺塔最优解运动过程中的状况,返回它是第几个状况。...福大大 答案2021-07-27: 1-7的汉诺塔问题。 1. 1-6左→中。 2. 7左→右。 3. 1-6中→右。 单决策递归。 k层汉诺塔问题,是[2的k次方-1]步。 时间复杂度:O(N)。...} return p1 + p2 + p3 } } func kth2(arr []int) int { if len(arr) == 0 { return

    1.2K30

    好文:来自OCO-3的以城市为中心的卫星CO2观测:洛杉矶特大城市的初步观测

    Los Angeles megacity 来自轨道碳观测站3的以城市为中心的卫星CO2观测:洛杉矶特大城市的初步观察 From:加州理工学院 摘要:NASA的轨道碳观测站3(OCO-3)旨在支持对人为二氧化碳排放量的量化和监测...在目标模式观察期间,OCO-3会收集一系列相对较长的片段(通常为5或6个片段),从而产生一系列沿轨道重叠的条带。...重叠的条幅可以覆盖最大20×80 km2的区域(OCO-2为20×20 km2),还可以在TCCON城市站点上绘制XCO2的小地图。与OCO-2相比,OCO-3的占地面积也略大。...OCO-3沿轨道足迹的大小在最低点为≃2.2 km,跨轨道足迹的大小≤1.6 km,与OCO-2(3 km2)相比,足迹区域(3.5 km2)稍大。...显示的是大洛杉矶都市区在原始空间分辨率下模拟的XCO2增强(左列),在OCO-3足迹位置(中心列)采样,以及WRF-Chem与观察到的OCO-3 XCO2增强之间的差异(Δ XCO2定义为模型减去观测值

    1.5K30

    2022-06-27:给出一个长度为n的01串,现在请你找到两个区间, 使得这两个区间中,1的个数相等,0的个数也相等, 这两个区间可以相交,但是不可以完全重叠

    2022-06-27:给出一个长度为n的01串,现在请你找到两个区间,使得这两个区间中,1的个数相等,0的个数也相等,这两个区间可以相交,但是不可以完全重叠,即两个区间的左右端点不可以完全一样。...现在请你找到两个最长的区间,满足以上要求。来自百度。答案2022-06-27:这道题取巧了。用动态规划不是取巧的方式。L0=最左0和最右0的长度,L1=最左1和最右1的长度,求L0和L1的最大值即可。...let mut arr = random_array(size); let ans1 = longest1(&mut arr); let ans2 = longest2(&mut...("ans2 = {}", ans2); break; } } println!...v2) in v.iter() { let num = *v2; if num > 1 { ans = get_max(ans

    67710

    创建redis cluster时,有警告提示

    192.168.5.128:7005 to 192.168.5.128:7002 Adding replica 192.168.5.128:7006 to 192.168.5.128:7003 M: 3cbed89c47ca14b3d1eb11dd2f7525fa6cb4fcd7...16383 (5461 slots) master S: f124b72c0421c7514f44668d30761d075e42643d 192.168.5.128:7004 replicates 3cbed89c47ca14b3d1eb11dd2f7525fa6cb4fcd7...f124b72c0421c7514f44668d30761d075e42643d 192.168.5.128:7004 slots: (0 slots) master replicates 3cbed89c47ca14b3d1eb11dd2f7525fa6cb4fcd7...in the next release 警告:98处的错误元素类型为nil(预期数组) 警告:不推荐忽略错误的元素,请明确删除它们 警告:这会在下一个版本中导致ArgumentError 解决方法:...1)、将需要新增的节点下appendonly.aof、dump.rdb等本地备份文件删除; 2)、同时将新node的集群配置文件删除,即:删除你redis.conf里面cluster-config-file

    94630

    算法入门:专题攻克一---双指针(3)有效三角形的个数 查找总价格为目标值的两个商品(剑指offer题目)

    先来固定最大的数字,这里给一个数组我们好理解,[ 2, 2, 3, 4, 5, 9, 10],先固定第三边c=10,然后将定义两个指针,left先从索引为0的元素开始,假设left所在的数字数值为a,right...是C之前的索引为n-2的元素,指向第二大的元素,right所在的数字数值为b,如果最小的元素数值跟第二大的元素数值相加大于最大的数值,那么此时2之后的元素跟9相加都会大于10,此时有right-left...,最后返回ret即可; 接着需要利用双指针来统计符合元素的三元组,在此之前需要有一个数组中大的数字充当c,但是这个C不是固定的,让c从数组最后一个元素向前遍历到索引为2的数字,for(int i=n-...解法二:利用单调性,使用双指针算法解决问题 将left放置在索引为0的位置,right放置在n-1的位置,这里给一个详细的例子数组[ 2 7 11 15 19 21 ],target为30,首先left...:说明left太小了,left++; sum=target:返回nums[left],nums[right] 但是由于题目中没有给出一整个数组中都找不到两个相加等于target的数,原则上我们已经完成了题目的要求

    12610
    领券