栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

异或运算面试题——一个数组中有一种数出现K次,其它数都出现了M次,M>1且K<M, 找到出现了K次的数,并要求额外空间复杂度为O(1),时间复杂度为O(N)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

异或运算面试题——一个数组中有一种数出现K次,其它数都出现了M次,M>1且K<M, 找到出现了K次的数,并要求额外空间复杂度为O(1),时间复杂度为O(N)

题目:一个数组中有一种数出现K次,其它数都出现了M次,M>1且Kpackage com.harrison.class01; import java.util.HashMap; import java.util.HashSet; public class Code12_KM { public static int onlyKTimes(int[] arr,int k,int m){ int[] t=new int[32]; for(int num:arr){ for(int i=0; i<=31; i++){ t[i]+=(num>>i)&1; } } int ans=0; for(int i=0; i<32; i++){ if((t[i]%m)!=0){// 在第i位上有1 ans |= (1< map=new HashMap<>(); for(int num:arr){ if(map.containsKey(num)){ map.put(num,map.get(num)+1); }else{ map.put(num,1); } } for(int num:map.keySet()){ if(map.get(num)==k){ return num; } } return -1; } public static int[] generateRandomArray(int maxKinds,int range,int k,int m){ // 出现了K次的这种数 int kTimesNum=randomNumber(range); // 数的种类 numKinds >=2 int numKinds=(int)(Math.random()*maxKinds)+2; // 数组长度: 1*k + (numKinds-1)*m int[] arr=new int[k+(numKinds-1)*m]; int index=0; for( ; index set=new HashSet<>(); set.add(kTimesNum); while(numKinds!=0){ int curNum=0; do{ curNum=randomNumber(range); }while(set.contains(curNum)); set.add(curNum); numKinds--; for(int i=0; i
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/712855.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号