第一章:位运算-------出现k次与出现1次

算法 | 如何用位运算从一堆数中寻找出现K次的数? 本文主要介绍如何使用位运算从一堆数中寻找出现K次的数,这一堆数中有很多数出现了M次,只有一个数出现了K次,并且K是小于M的,另外要求额外空间复杂度为O(1),时间复杂度为O(n),那么该如何寻找出这个数呢?例如,给出一个数组,K = 2,M = 3。在这个数组中,只有1这个元素出现了2次,其他的元素都出现了3次,现在要求使用位运算把1这个元素找出来。本文主要介绍如何使用位运算从一堆数中寻找出现K次的数,利用了二进制、或运算、以及题目中M次的逻辑关系。如果你有更好的办法,欢迎在评论区留言交流。 阅读详情

第一章:位运算-------出现k次与出现1次

 

问题:

数组中只有一个数出现了一次,其他的数都出现了k次,请输出只出现1次的数。

 

知识点:

2个相同的2进制数,做不进位加法,结果为0;

10个相同的10进制数,做不进位加法,结果为0;

k个相同的k进制数,做不进位加法,结果为0;

 

思路:

将这些数,全部转换为k进制数,然后做不进位加,最后将结果转换为十进制数。

 

#include<iostream>
#include<algorithm>
//#include<cmath>
using namespace std;

//十进制数转K进制 
string decTok(int dec,int k){
	string ret="";  //作为结果
	
	while(dec>0){
		ret+=char(dec%k+'0');     //如:5+'0'='5' 
		dec/=k;
	} 
	reverse(ret.begin(),ret.end());
	return ret;
}

//K进制转十进制
int kTodec(string str,int k){
	int ans=0;
	for(int i=0;i<str.size();i++){
		ans=ans*k+(str[i]-'0');        //020  首位是最高位 
		//ans+=(str[i]-'0')*pow(k,str.size()-1-i);
	}
	return ans;
} 

int main(){
	int n[]={1,1,1,3,3,3,5,5,5,9,9,9,6,7,7,7};
	int k=3;
	
	string str[16];
	for(int i=0;i<16;i++){
		str[i]=decTok(n[i],k);
	}
	
	//找出16条字符串中最大长度
	int maxlen=0;
	int len;
	for(int i=0;i<16;i++){
		len=str[i].size();
		maxlen=max(maxlen,len);     //不能用: maxlen=max(maxlen,str[i].size())
	} 
	
	//16条字符串中,若字符串长度<maxlen,则进行补齐,以便逐位做不进位加
	for(int i=0;i<16;i++){
		while(str[i].size()<maxlen){
			str[i]="0"+str[i];
		}
	} 
	
	//ans:结果。初始化 
	string ans="";
	while(ans.size()<maxlen){
		ans+="0";
	}
	
	//16条字符串做不进位加
	for(int i=0;i<16;i++){
		for(int j=0;j<maxlen;j++){
			ans[j]=char(((str[i][j]-'0')+(ans[j]-'0'))%k+'0');
		}
	} 
	cout<<ans<<endl;
	
	//ans字符串结果转为10进制数 
	int finalans=kTodec(ans,k);
	cout<<finalans<<endl;
		 
	return 0;
}

结果:

蓝桥杯实战应用【算法代码篇】-出现k次与出现1次(附Java和C++代码) 给定一个长度为 n 的整型数组 arr 和一个整数 k(k>1)。已知 arr 中只有 1 个数出现一次,其他的数都出现 k 次。请返回只出现了 1 次的数。示例1:输入:[5,4,1,1,5,1,5],3返回值:4示例2:输入:[2,2,1],2返回值:1。... 阅读详情

相关推荐

出现k次与出现1次,二进制中有几个1

题目1: 数组中只有一个数出现了一次其他数均出现k次,求出出现一次的数 算法思想与代码写一起了,见注释 public class 出现k次与1次 { /* * 【当k为偶数奇数都适用】 * 算法思想: * 1,把所有的数字转化为k进制 * 2,让转化后的数每一相同的位相加 * 3,每一位相加后的数除k取余得到一个k进制的数 * 4,将该数转化为十进制即可输出 */ public static void main(String[] args) { int [] arr={2,2,2,2,3,3,3,3,6,6,6,6,9,9,9,9,8,8,8,8,7,5,5,5

1070: PIPI的数组

题目描述 PIPI现在有一个全部为正整数组成的数组,他想知道元素 v 第 k次出现在数组中的位置,胖虎能帮帮PIPI吗? PIPI是个好奇心很重的人,他会有m次询问哦~ 输入 输入包含多组测试样例。 对于每一组测试样例,第一行包含两个正整数 n,m .代表数组的长度和询问的次数。 (1<=n,m<=105) 第二行包括n个正整数,每个正整数 v < 106。 接下来包含m组询问,...

weixin_44433678的博客 438

【翼型】基于Matlab的NACA翼型气动性能仿真与优化【附源码】

本文详细介绍了如何使用Matlab进行NACA翼型的气动性能仿真与优化。内容涵盖从生成NACA翼型坐标、利用面板法快速估算升阻力,到进阶的粘性流模拟与优化设计入门。通过清晰的代码示例和分步指南,帮助读者掌握基于Matlab的翼型分析与优化流程,为飞行器或叶片设计提供实用工具和方法。

weixin_29032489的博客 412

#每天一道算法题:出现一次与出现k次的数

出现一次与出现k次的数,分别使用hashMap和不进位加法两种解法,超详细,每句代码都有注释!!!

黑虎阿福的博客 535

数仓 - 促销敏感度、评论敏感度

1. 促销敏感度 步骤1. 首先按照最后一次下单时间及有无复购情况将用户分为四大群体: 近一年有购物行为且复购的用户 -- L1 (今年复购用户) 近一年有购物行为但无复购的用户 --L2 (今年一单购用户) 最后一次下单时间在1年之前且有复购的用户 --L3 (今年无购且只有一单用户) 最后一次下单时间在1年之前但无复购的用户 -- L4 (今年无购多单用户) 步骤2. 每一类用户群再根据优惠订单占比、每单优惠金额占比的平均值、优惠金额这三个指标进行k-means聚类,分为: 非常敏感 -

weixin_41332009的博客 1900

上下文理解的AI增强方案:AI应用架构师的架构洞察

本文将从AI应用架构师的视角,深入探讨“上下文理解”的技术本质、核心挑战,以及一套可落地的上下文增强架构方案。我们会拆解上下文理解的底层需求,分析架构设计中的关键决策,并通过具体案例展示如何构建一个能“记住过去、理解现在、预测未来”的AI系统。三个维度:上下文的内容范围(短期/中期/长期)、数据类型(文本/结构化/多模态)、技术挑战(窗口限制/信息过载/跨会话一致性);三种架构模式:分层上下文存储(热/冷数据分离)、上下文路由(按需筛选)、动态压缩(适配模型窗口);四个关键组件。

欢迎来到我的优快云空间!这里聚焦AI大模型应用实战,分享前沿技术、实战案例与开发经验。 220

算法题_位运算_9_出现一次的数字和出现k次的数字

位运算--出现一次的数字和出现k次的数字

Window_mouse的博客 1万+

基因树构建全流程:从OrthoFinder到iTOL的保姆级教程(附兰科植物案例)

本文提供了一份从OrthoFinder到iTOL的基因树构建全流程保姆级教程。详细解析了利用OrthoFinder构建物种树、IQ-TREE构建无根基因树、Notung进行树调和生根,以及最终在iTOL中实现专业可视化的每一步操作与实战经验,并以兰科植物NB-ARC基因家族为例进行演示,帮助研究者系统掌握基因树分析方法。

tequila的博客 524

K-th occurrence HDU - 6704 (主席树+后缀数组+二分)

题目传送 题意:给出一个字符串,找出某个子串第k次出现的位置 思路:后缀数组sa[i]数组表示排名第i的后缀第一次出现的下标,求第k次出现的下标只需要在某个区间中求sa数组中的第k大即可(主席树求第k大),确定区间时利用后缀数组中的lcp确定与子串具有相同前缀的后缀第一次出现位置和最后一次出现位置(枚举超时,二分实现)。 代码: #include <iostream> #in...

speaker__的博客 306

数字IC后端PR阶段Innovus,ICC,ICC2修复short万能脚本分享

数字IC后端PR阶段Innovus,ICC,ICC2修复short万能脚本分享

weixin_37584728的博客 3460

哈密顿-雅可比不等式:连接最优控制与优化算法的自然物理原理

在控制理论与优化算法之间,存在一个深刻而实用的桥梁。最优控制理论旨在通过设计控制输入,使动态系统在时间维度上达到性能最优,其核心数学工具如庞特里亚金极大值原理和哈密顿-雅可比-贝尔曼方程,为解决连续时间系统的优化问题提供了优雅框架。然而,这些方法在高维非凸问题中面临求解难题。哈密顿-雅可比不等式作为一种松弛方法,通过构造李雅普诺夫函数并验证一个不等式条件,转而寻求性能有保障且易于实现的次优解,其本质是保证系统能量衰减和性能上界。这一原理与耗散性理论紧密相连,体现了自然物理系统(如阻尼振动)中能量耗散的普遍规

weixin_30582943的博客 314

面试题38. 数字在排序数组中出现的次数

题目描述 统计一个数字在排序数组中出现的次数。例如输入排序数组[1, 2, 3, 3, 3, 3, 4, 5]和数字3,由于3在这个数组中出现了4次,因此输出4思路1: 很明显,从头遍历数组,就能统计出3出现的次数,时间复杂度为O(n) Java 代码如下:// O(n)的方法 public class Solution { public int GetNumberOfK(int []

两鬓已不能斑白的专栏 546

Unity 热更新技术 |(六)xLua框架学习最新系列完整教程

开始学习热更新方面系列知识,就从这一篇开始吧! 本系列教程 会从热更新基本概念出发,详细介绍热更新相关的全套知识点。 如热更新技术基本原理、热更新主流方案、AssetBundle系列教程、Lua语言编程、Lua与Unity交互教程、Xlua框架使用、热更新实战教程等方面。 热更新作为一个开发者必备技能,如果想学习的话,可以从现在开始了哦~ 接下来先从XLua学习使用 开始学习吧!

努力前行,总会成为自己心中的那道光 1万+

【手把手带你刷LeetCode】——02.出现1次和K次的数(位运算)

【前言】:Hello,铁汁们好,又见面咯。今天是LeetCode打卡第二天,很高兴能和你一起学习,咱们一起加油。 原题:出现1次与出现K次的数 题目描述: 给定一个长度为 n的整型数组 arr和一个整数 k(k>1) 。 已知 arr中只有 1 个数出现一次,其他的数都出现 k次。 请返回只出现了 1 次的数。 示例1: 输入:[5,4,1,1,5,1,5],3 返回值:4 示例2: 输入:[2,2,1],2 返回值:1 哈哈,看过我之前关于位运算博客的童...

安然无虞的博客 4260

YOLOv8改进:在C2F模块中引入RepGhost Bottleneck模块

C2F类是YOLOv8中的C2F模块的实现,它包含一个RepGhostBottleneck模块、一个卷积层和一个批归一化层。通过在C2F模块中引入RepGhost Bottleneck模块,我们可以在保持计算效率的同时提升模型的表达能力。这是因为RepGhost Bottleneck模块通过引入重复的卷积核来扩展模型的感受野,从而增加了模型对不同尺度目标的感知能力。RepGhost Bottleneck是一种用于卷积神经网络的改进模块,它可以在保持计算效率的同时提升模型的表达能力。希望以上内容对你有帮助!

IlgCrystal的博客 1307

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

位运算-出现K次与出现1次

出现K次与出现1次题目描述应会知识实现思路代码实现 题目描述 数组中只有一个数只出现1次,其它数都出现K次,将出现1次的数输出。 应会知识 位运算符:异或**^** 可以将其理解为不进位相加; 例:1+1=0,0+0=0,1+0=1; 10异或12(二进制) 10------1 0 1 0 12------1 1 0 0 结果: 0 1 1 0 只有在其不相等时为1 必须搞懂:用不进位的...

m0_46643508的博客 378

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

1.6 出现k次与出现1次

Chapter1: 位运算的奇技淫巧 6. 出现k次与出现1次 题目 数组中只有一个数只出现了1次,其它的数都出现了k次,请输出只出现了一次的数。 其中k为用户输入 算法 解法1(使用位运算技巧) 使用 hashmap 效果是一样的,代码还更精简,这个稍后数据结构部分再了解 原理 k个k进制数不进位相加 结果是 0 解法 将这个数组中的数全部转为k进制 除k取余法(通用的计...

bloger博客 285

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

出现K次与出现1次

题目如下: public class 出现K次与出现1次 { /** * @param args */ public static void main(String[] args) { // mytest(); // 位运算解法 int a[] = { 2, 2, 2, 9, 7, 7, 7, 3, 3, 3, 4, 4, 4, 5, 5, 5 }; int le...

最白の白菜的博客 248

位运算(8)—— 出现k次与出现1次

题目   数组中只有一个数出现了一次,其他的数都出现了k次,请输出只出现了1次的数。 分析   例如2个二进制数10做不进位加法,结果为二进制00;10个十进制数20做不进位加法,结果为十进制0,由此可得上图规律,k个相同的k进制数做不进位加法,结果为0。故我们可以将所有的数转化成为K进制,然后做K进制的不进位加法,得出的结果再从K进制转换为10进制。 代码实现 public class _07出现k次与出现1次 { public static void main(String[] args) {

小R.的博客 407

1.8 编程实践:出现k次与出现1次(两种解法)

Problem: 数组中只有一个数出现了1次,其他的数都出现了k次,请输出出现了1次的数。 其中k你输入的 解法1 : 使用HashMap来解决问题,这里不多讲 实现代码:  /** * 解法2-使用HashMap(更容易想到) * @param nums * @return */ public static int getOnce2(int[] nums) { M...

the blog of Lee 1054

Java算法--第一章--位运算符(8)出现k次与出现1次

Java算法–第一章–位运算符(8)出现k次与出现1次 题目:数组中只有一个数出现了1次,其他的数都出现了k次,请输出只出现了1次的数。 补充知识点:(1)2个相同的二进制数做不进位加法,结果为零; (2)10个相同的十进制数做不进位加法,结果位零; (3)k个相同的k进制数做不进制加法,结果为零 代码: package exer1; public class 出现k次和出现1次 { public static void main(String[] args) { int[] ar

wp_886的博客 335

位运算——出现K次的数

在arr中,只有一种数出现了K次,其他数都出现了M次 找出那个出现了K次的数

Go的全部 555

位运算 出现K次与出现1次(C++代码)

出现K次与出现1次 这题难度上升,涉及其他基础知识。建议:多看几遍思路和代码,自己动手模拟下。 解题思路: 解题的突破口:利用k个K进制的数进行不进位加法,结果是 0 的结论 先把十进制的数转为k进制,并采用字符串倒序存储 用除k取余法(通用的计算方法),将数组中的数转为k进制数。 因为转化为k进制后要按位(列)进行计算,采用字符串的形式储存。转化为k进制后由于数的大小不同,长度也有可能不同,虽然对于有k个数的数字而言求和都是0没区别,但对要求的那个数来说位序很关键,(计算时是字符串是由左到右计算,而

Dragon_1718的博客 500

出现k次与出现1次

解法1; HashMap public static int getOnce2(int[] nums) { Map<Integer, Integer> map = new HashMap<Integer, Integer>(); for (int i = 0; i < nums.length; i++) { if(map.containsKey(nums[i])) { int num = map.get(nums[i]); num++; map.pu.

m0_43425029的博客 165

位运算全面总结,关于位运算看这篇就够了

关于位运算的奇技淫巧,看完这篇你就能灵活使用位运算了。

pursuit的博客 12万+
上一篇: 第一章:位运算-------输入浮点数,输出对应二进制数
下一篇: 第二章 :查找与排序---------递归、查找与排序补充
Estrellas_
博客等级 码龄9年 273粉丝 233原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值