内存限制下查找数组的重复数

LeetCode 寻找重复数 给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。 示例 1: 输入: [1,3,4,2,2] 输出: 2 示例 2: 输入: [3,1,3,4,2] 输出: 3 说明: 不能更改原数组(假设数组是只读的)。 只能使用额外的 O(1) 的空间。 时间复杂度小于 O(n2) 。... 阅读详情

题目:给定一个数组,包含1到n的整数,n最大为32000,数组可能含有重复的值,且n的取值不定。若只有4KB的内存可用,该如果打印数组中所有重复的元素?

思路:检测重复数的题目做过很多了,通常是建议一个哈希表,对访问过的元素进行标记,当访问的元素未标记时,标记这一元素,如果已经标记,说明重复,输出。哈希表可以用数组实现,假设申请int型的大小为32000的数组,那么使用的空间大小为32000*4B,超过了内存限制。转而去用位操作实现,一个int型占32位,总共需要32000个位,所以有1000个int型的数就可以了,这时候占用内存空间为1000*4B小于4KB(这里的K=1024>1000)。

class BitSet
{
private: 
	int* bitset;

public: 
	BitSet(int size);
	bool Get(int num);
	void Set(int num);
};

BitSet::BitSet(int size)
{
	bitset = new int[size>>5];    //除以32
}

bool BitSet::Get(int num)
{
	int wordNumber = num >> 5;
	int bitNumber = num & 0x1F;
	return (bitset[wordNumber] & (1 << bitNumber)) != 0;
}

void BitSet::Set(int num)
{
	int wordNumber = num >> 5;  //除以32
	int bitNumber = num & 0x1F; //除2取余数
	bitset[wordNumber] |= 1 << bitNumber;
}

void CheckRepetitive(int* array, int length)
{
	if(array == NULL || length < 1)
		return;
	
	BitSet hash(length);	
	for(int i = 0; i < length; ++i)
	{
		int num = array[i] - 1;  //位从0开始,而数组从1开始
		if(hash.Get(num))
			cout << array[i] << " ";
		else
			hash.Set(num);
	}
}


Leecode:给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数 题目 /** * 给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。 * 示例 1: * 输入: [1,3,4,2,2] * 输出: 2 * 示例 2: * 输入: [3,1,3,4,2] * 输出: 3 * 说明: * 不能更改原数组(假设数组是只读的)。 * 只能使用额外的 O(1) 的空间。 * 时间复杂度小于 O(n2) 。 * 数组中只有一个重复的数字,但它可能不止 阅读详情

相关推荐

算法——寻找重复的数

案例分析: 给定一个包含n + 1 个整数的数组nums,其数字都在 1 到 n之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。 示例 1: 输入: [1,3,4,2,2] 输出: 2 示例 2: 输入: [3,1,3,4,2] 输出: 3 说明: 不能更改原数组(假设数组是只读的)。 只能使用额外的 O(1) 的空间。 时间复杂度小于 O(n2) 。 数组中只有一个重复的数字,但它可能不止重复出现一次。 方法一:利用hash...

weixin_40701758的博客 3025

Leetcode287

题目 Leetcode287 给定一个包含n + 1 个整数的数组nums,其数字都在 1 到 n之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。 示例 1: 输入: [1,3,4,2,2] 输出: 2 示例 2: 输入: [3,1,3,4,2] 输出: 3 说明: 不能更改原数组(假设数组是只读的)。 只能使...

记录学习过程所学 1094

每日一练2020/7/28(C++)——找出数组中重复的数字;二维数组中的查找

// 面试题3(一):找出数组中重复的数字 // 题目:在一个长度为n的数组里的所有数字都在0到n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了, // 也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。例如,如果输入长度为7的数组{2, 3, 1, 0, 2, 5, 3}, // 那么对应的输出是重复的数字2或者3。 #include <iostream> using namespace std; /*parameters: numbers: a int array

shiki99的博客 917

寻找重复数

给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。 示例 1: 输入: [1,3,4,2,2] 输出: 2 示例 2: 输入: [3,1,3,4,2] 输出: 3 说明: 不能更改原数组(假设数组是只读的)。 只能使用额外的 O(1) 的空间。 时间复杂度小于 O(n2) 。 数...

叶落忆痕的博客 564

100G大文件单机处理(在100G大文件中找到第一个不重复的字符串,16G内存限制)

Large-File-Processing 问题: 有一个 100GB 的文件,里面内容是文本 要求: 找出第一个不重复的词 只允许扫一遍原文件 尽量少的 IO 内存限制 16G 随机字符串,每行一个字符串 (长度范围从 0-100)。 思路: 100G字符串,0-100字节随机,最后换行占两个字节 每行是一个byte数组,长度1-100不等(不加上换行符),一个字节8位,所以共有2^800...

The home of twodog 5847

STM32G4实战:用CubeMX+Keil五分钟搞定FreeRTOS多任务LED控制(避坑指南)

本文详细介绍了如何在STM32G4系列芯片上使用CubeMX和Keil快速配置FreeRTOS实现多任务LED控制,包括环境准备、时钟配置、任务创建及常见问题解决方案。重点解决了时钟源冲突等高频问题,并提供了优化建议和进阶应用示例,帮助开发者高效完成嵌入式开发任务。

joy55的博客 222

第k小整数

题目描述: 现有n个正整数,n≤10000,要求出这n个正整数中的第k个最小整数(相同大小的整数只计算一次),k≤1000,正整数均小于30000。 输入: 第一行为n和k,第二行开始为n个正整数的值,整数间用空格隔开。 输出: 第k个最小整数的值;若无解,则输出“NO RESULT”。 样例输入: 10 31 3 3 7 2 5 1 2 ...

dianminba7855的博客 1129

【YOLOv11工业级实战】22. YOLOv11动态蛇形卷积破解弯曲裂纹检测难题(附2小时部署代码)

摘要:本文聚焦工业场景中弯曲裂纹检测的核心痛点,针对风电叶片、织物纱线等曲线缺陷传统检测漏检率高的问题,提出基于动态蛇形卷积(DSC)的YOLOv11优化方案。因企业数据保密,采用AITEX织物缺陷库(含曲线纱线断裂标签)结合Blender物理仿真生成2000张弯曲裂纹数据,实现从数据准备到部署的全流程实操。通过将DSC模块插入YOLOv11 Neck层,弯曲裂纹召回率从68.1%提升至89.4%,mAP@0.5达83.7%,推理速度3.1ms(2080Ti)。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1153

大数据方面问题的解决办法和技巧

大数据方面面试题思路与技巧大数据题目的解题技巧题目1 找到未出现的数解法:位图进阶问题解法:无符号整形词频统计数组再次进阶问题解法:二分法题目2 找到重复的URL解法:布隆过滤器 或 Hash分流 大数据题目的解题技巧 哈希函数可以把数据按照种类均匀分流 布隆过滤器用于集合的建立与查询,并可以节省大量空间 一致性哈希解决数据服务器的负载管理问题 利用并查集结构做岛问题的并行计算 位图解决某一范围上数字的出现情况,并可以节省大量空间 利用分段统计思想、并进一步节省大量空间 利用堆、外排序来做多个处理单元的结

Wantbebetter的博客 1840

【嘉立创EDA】PCB金属包边设计快捷方法

本文使用嘉立创EDA,描述如何在PCB设计时,快速增加边框包边设计,特别是金属包边(伪)——这里标记(伪)是因为该这里的包边特指不含边缘壁。请参考本文时特别注意!本文将此过程记录,以供有需要的读者参考。

l64481000的博客 1733

常用元器件使用方法3:电平转换芯片74LVC1T45的使用方法

介绍: 74LVC1T45是一个单位双向可控电平转换芯片。   芯片特性: 1、宽供给电压范围:1.65V到5.5V; 2、3.3V时,可输出24mA电流; 3、最大16uA电能损耗; 4、高噪音抑制;   型号:   引脚: VCC(A) 1 A端和DIR电源 GND 2 地 A 3 数据输入/输出 B 4 ...

snmplink的博客 1万+

力扣hot100——最长连续序列(哈希unordered_set)

力扣hot100——最长连续序列(哈希)

ml29895063的博客 433

超详细的Burp Suite安装使用

‌Burp Suite是一个强大的Web应用安全测试工具,适用于网络安全专业人士进行自动化网络应用程序的安全测试。‌ 它提供了在Windows和Kali Linux上安装和激活Burp Suite Professional的简便步骤,帮助用户快速集成并启用强大的网络扫描和渗透测试功能。Burp Suite的特点包括易于安装、良好的兼容性、内置的自动化工具、优秀的用户体验以及详细的教程,使得无论是安全领域的新手还是经验丰富的专家,都能轻松上手并高效地进行安全测试。此外,Burp Suite还支持扩展功能的使用

Dreams°的博客 2641

【LeetCode & 剑指offer刷题】数组题10:Intersection of Two Arrays(系列)

【LeetCode &amp; 剑指offer刷题】数组题10:Intersection of Two Arrays(系列) 【LeetCode &amp; 剑指offer 刷题笔记】目录(持续更新中...) 349. Intersection of Two Arrays Given two arrays, write a function...

技术改变世界 1029

RK3588多核NPU并行加速yolo优化教程:基于线程池的高性能推理实现

本教程详细介绍了RK3588多核NPU的并行加速优化方法。RK3588搭载三个独立NPU核心,总计算能力达6TOPS,但传统单线程方式无法充分发挥其性能。文章从硬件架构分析入手,详细讲解了三核心独立处理架构和多种工作模式,并通过代码示例展示了线程池技术的实现原理。线程池通过预创建工作线程、任务队列和条件变量等核心组件,避免了频繁创建线程的开销,能显著提升NPU的并行处理效率。教程还提供了性能计算公式和内存带宽优化策略,帮助开发者最大化利用RK3588的硬件算力,实现高性能AI推理。

LXY_LOVE36的博客 1023

C#上位机实战:工业产线数据采集与监控系统开发(附源码思路)

模块化设计:四层架构清晰,各模块独立可替换,便于后期维护与扩展;稳定性强:支持断线重连、异常重试、并发采集,满足工业7×24小时运行需求;实用性高:覆盖产线监控核心功能,可视化组件适配工业场景,操作简单;源码可复用:通信类、采集服务、报警管理器等可直接复制到其他上位机项目。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1651

LeetCode-题目详解(三):二分查找法【 O(logn)】

给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。示例 1: 示例 2: 示例 3: 示例 4: 示例 5: 提示:方法一:二分查找【时间复杂度:O(log(m+n))O(log(m+n))O(log(m+n))】 方法二: 一般看到O(log())级别的,就先想二分,分而治之的那些思想。比如归并排序,快排……本题主要处理好边界问题,相对于思想,边界处理和代码技巧更重要 方法三: https://leetcode-cn.com/pr

u013250861的博客 1206

指纹对抗指南:如何绕过Cloudflare与Akamai的5s盾与浏览器指纹检测

现在的CDN反爬技术虽然越来越强,但是道高一尺魔高一丈,只要掌握了指纹伪造、流量伪装、行为模拟这些核心技术,就可以绕过绝大多数的防护措施。对抗过程中要注意效率和成本的平衡,小规模爬取用Playwright+stealth最方便,大规模爬取用curl_cffi+代理池性价比最高,遇到验证码用打码平台或者自动识别服务,不需要死磕破解。本文介绍的方案已经在实战中验证过,可以绕过95%以上的Cloudflare/Akamai防护,成功率非常高。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 295

java找出不重复的数_关于Java:在整数数组中查找第一个非重复数

我有一个考试题:Given an integer array find the first number which is not repeating in array using O(N) time complexity and O(1) space complexity.我想不出任何解决方案。 我知道我可以遍历数组并维护一个linkedhashmap,它将存储数组元素和它出现的次数,然后最后我...

weixin_39907220的博客 834

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

剑指offer —《数组中重复的数 》

题目:《数组中重复的数》 详细描述: 在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 示例 1: 输入: [2, 3, 1, 0, 2, 5, 3] 输出:2 或 3 限制: 2 <= n <= 100000 考查: 数组、哈希表 思考: 解法...

weixin_44680403的博客 113

ssm框架搭建

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

数组中的重复数字

找出数组中重复的数字。 “在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。”数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 示例 1: 输入: [2, 3, 1, 0, 2, 5, 3] 输出:2 或 3 限制: 2 <= n <= 100000 import java.util.*; ...

Kyrie23的博客 190

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

算法通关村 —— 位运算在查找重复元素中的秒用

在大部分算法中,默认给定的数据量都很小的,例如只有几个或者十几个元素,但是如果将数据量提高到百万甚至十几亿,那处理逻辑就会发生很大差异,这也是算法考查中,经常出现的类问题。问题的热身题,如果去掉“只有4KB”的要求,我们可以先创建一个大小为N的数组,然后将这些数据放进来,但是整数最大为32000。如果发现数组元素是v,那么就将位置为V的设置为1,碰到重复元素,就输出一下。的整数数组,如果用整数存储需要16GB左右的空间,而如果使用位存储,就可以用。,无法在内存中放下,则需要考虑。,且N的取值不定,若只有。

Beyondevt的博客 236

01、找出数组中重复的数字

1、找出数组中重复的数字 题目:在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。 解法一:Map集合 思想:遍历数组,查看对应的元素是否存在于map集合中,存在则返回,不存在则加入到map集合中。 public boolean duplicate(int numbers[],int leng

weixin_44301710的博客 1111

最长重复子串(可重复) 后缀数组

最长重复子串时间限制:1000 ms  |  内存限制:3000 KB 描述 对于一个字符串S1,其中S2是他的一个子串(长度严格小于S1长度),如果S2在S1中出现次数超过1次,那么S2就是一个重复子串,现在的要求是给定S1,请求出他的最长重复子串;如果有多个长度一样的最长子串,请输入字典序最小那个串;比如bbbaaaccc那么最长子串就是aa输入 第一行包含一个整数T,表示有T组数据对于每组数据包含一行,该行有一个字符串,长度小于10,000输出 对于每组数据请输出他的最长重复子串,保证每组数据都有;样

kongming_acm的专栏 2639

查找数组中重复的数字

题目来源于《剑指Offer》中的面试题3:找出数组中重复的数字。  // 题目:在一个长度为n的数组里的所有数字都在0到n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,  // 也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。例如,如果输入长度为7的数组{2, 3, 1, 0, 2, 5, 3},  // 那么对应的输出是重复的数字2或者3。 ...

weixin_30337157的博客 116

数组相关及LeetCode题分享之二分查找

1. 数组相关知识:数组是存放在连续内存空间上的相同类型数据的集合。数组可以通过下标索引的方式获取到下标对应的数据。注意:数组下标都是从0开始的,数组在内存中的空间地址是连续的。也正是由于数组在内存中的空间地址是连续的,所以在进行元素的删除和添加的时候,就要移动其他元素的地址,并且数组中的元素是不能删除的,只能覆盖。在Java中,数组(Array)的内存空间是连续的(注意这里是虚拟内存)。

me_andy的博客 775
上一篇: 位操作求余数
下一篇: KMP代码实现
moses1213
博客等级 码龄12年 56粉丝 147原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值