pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

在 O(n) 時(shí)間和 O(1) 空間中查找重復(fù)項(xiàng)

Finding duplicates in O(n) time and O(1) space(在 O(n) 時(shí)間和 O(1) 空間中查找重復(fù)項(xiàng))
本文介紹了在 O(n) 時(shí)間和 O(1) 空間中查找重復(fù)項(xiàng)的處理方法,對大家解決問題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!

問題描述

輸入:給定一個(gè)由 n 個(gè)元素組成的數(shù)組,其中包含從 0 到 n-1 的元素,這些數(shù)字中的任何一個(gè)出現(xiàn)任意次數(shù).

目標(biāo):在 O(n) 中找到這些重復(fù)的數(shù)字,并且只使用恒定的內(nèi)存空間.

例如,設(shè) n 為 7,數(shù)組為 {1, 2, 3, 1, 3, 0, 6},則答案應(yīng)為 1 &3.我在這里檢查了類似的問題,但答案使用了一些數(shù)據(jù)結(jié)構(gòu),如 HashSet 等.

有什么有效的算法嗎?

解決方案

這是我想出來的,不需要額外的符號位:

for i := 0 to n - 1而 A[A[i]] != A[i]交換(A[i],A[A[i]])結(jié)束時(shí)結(jié)束于對于 i := 0 到 n - 1如果 A[i] != i 那么打印 A[i]萬一結(jié)束于

第一個(gè)循環(huán)對數(shù)組進(jìn)行置換,以便如果元素 x 至少出現(xiàn)一次,那么其中一個(gè)條目將位于 A[x] 位置.

請注意,乍一看它可能不是 O(n),但確實(shí)如此 - 盡管它有一個(gè)嵌套循環(huán),但它仍然在 O(N) 時(shí)間內(nèi)運(yùn)行.交換僅在存在 i 使得 A[i] != i 時(shí)發(fā)生,并且每個(gè)交換設(shè)置至少一個(gè)元素使得 A[i]== i,以前不是這樣.這意味著交換的總數(shù)(以及 while 循環(huán)體的執(zhí)行總數(shù))最多為 N-1.

第二個(gè)循環(huán)打印 x 的值,其中 A[x] 不等于 x - 因?yàn)榈谝粋€(gè)循環(huán)保證如果 x 在數(shù)組中至少存在一次,其中一個(gè)實(shí)例將位于 A[x],這意味著它會打印 x 的那些值代碼> 不存在于數(shù)組中.

(Ideone 鏈接,您可以使用它)

Input: Given an array of n elements which contains elements from 0 to n-1, with any of these numbers appearing any number of times.

Goal : To find these repeating numbers in O(n) and using only constant memory space.

For example, let n be 7 and array be {1, 2, 3, 1, 3, 0, 6}, the answer should be 1 & 3. I checked similar questions here but the answers used some data structures like HashSet etc.

Any efficient algorithm for the same?

解決方案

This is what I came up with, which doesn't require the additional sign bit:

for i := 0 to n - 1
    while A[A[i]] != A[i] 
        swap(A[i], A[A[i]])
    end while
end for

for i := 0 to n - 1
    if A[i] != i then 
        print A[i]
    end if
end for

The first loop permutes the array so that if element x is present at least once, then one of those entries will be at position A[x].

Note that it may not look O(n) at first blush, but it is - although it has a nested loop, it still runs in O(N) time. A swap only occurs if there is an i such that A[i] != i, and each swap sets at least one element such that A[i] == i, where that wasn't true before. This means that the total number of swaps (and thus the total number of executions of the while loop body) is at most N-1.

The second loop prints the values of x for which A[x] doesn't equal x - since the first loop guarantees that if x exists at least once in the array, one of those instances will be at A[x], this means that it prints those values of x which are not present in the array.

(Ideone link so you can play with it)

這篇關(guān)于在 O(n) 時(shí)間和 O(1) 空間中查找重復(fù)項(xiàng)的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網(wǎng)!

【網(wǎng)站聲明】本站部分內(nèi)容來源于互聯(lián)網(wǎng),旨在幫助大家更快的解決問題,如果有圖片或者內(nèi)容侵犯了您的權(quán)益,請聯(lián)系我們刪除處理,感謝您的支持!

相關(guān)文檔推薦

How do I set the icon for my application in visual studio 2008?(如何在 Visual Studio 2008 中為我的應(yīng)用程序設(shè)置圖標(biāo)?)
Convert CString to const char*(將 CString 轉(zhuǎn)換為 const char*)
Remove secure warnings (_CRT_SECURE_NO_WARNINGS) from projects by default in Visual Studio(默認(rèn)情況下,在 Visual Studio 中從項(xiàng)目中刪除安全警告 (_CRT_SECURE_NO_WARNINGS))
How do I start a new CUDA project in Visual Studio 2008?(如何在 Visual Studio 2008 中啟動新的 CUDA 項(xiàng)目?)
Exporting classes containing `std::` objects (vector, map etc.) from a DLL(從 DLL 導(dǎo)出包含 `std::` 對象(向量、映射等)的類)
What are some reasons a Release build would run differently than a Debug build(發(fā)布版本與調(diào)試版本的運(yùn)行方式不同的一些原因是什么)
主站蜘蛛池模板: 伶俐嫂培训学校_月嫂培训班在哪里报名学费是多少_月嫂免费政府培训中心推荐 | 今日热点_实时热点_奇闻异事_趣闻趣事_灵异事件 - 奇闻事件 | 二手Sciex液质联用仪-岛津气质联用仪-二手安捷伦气质联用仪-上海隐智科学仪器有限公司 | 国产频谱分析仪-国产网络分析仪-上海坚融实业有限公司 | 北京企业宣传片拍摄_公司宣传片制作-广告短视频制作_北京宣传片拍摄公司 | 耳模扫描仪-定制耳机设计软件-DLP打印机-asiga打印机-fitshape「飞特西普」 | 粘度计,数显粘度计,指针旋转粘度计 | 水冷式工业冷水机组_风冷式工业冷水机_水冷螺杆冷冻机组-深圳市普威机械设备有限公司 | 磁力链接搜索神器_BT磁力狗_CILIMAO磁力猫_高效磁力搜索引擎2024 | 小威小说网 - 新小威小说网 - 小威小说网小说搜索引擎 | 选矿设备-新型重选设备-金属矿尾矿重选-青州冠诚重工机械有限公司 | 冷镦机-多工位冷镦机-高速冷镦机厂家-温州金诺机械设备制造有限公司 | 120kv/2mA直流高压发生器-60kv/2mA-30kva/50kv工频耐压试验装置-旭明电工 | 天一线缆邯郸有限公司_煤矿用电缆厂家_矿用光缆厂家_矿用控制电缆_矿用通信电缆-天一线缆邯郸有限公司 | 河南卓美创业科技有限公司-河南卓美防雷公司-防雷接地-防雷工程-重庆避雷针-避雷器-防雷检测-避雷带-避雷针-避雷塔、机房防雷、古建筑防雷等-山西防雷公司 | 佛山市德信昌电子有限公司| 施工围挡-施工PVC围挡-工程围挡-深圳市旭东钢构技术开发有限公司 | 液氮罐_液氮容器_自增压液氮罐_杜瓦瓶_班德液氮罐厂家 | 杭州成人高考_浙江省成人高考网上报名| 电池挤压试验机-自行车喷淋-车辆碾压试验装置-深圳德迈盛测控设备有限公司 | 安规电容|薄膜电容|陶瓷电容|智旭JEC安规电容厂家 | 杭州营业执照代办-公司变更价格-许可证办理流程_杭州福道财务管理咨询有限公司 | 广州二手电缆线回收,旧电缆回收,广州铜线回收-广东益福电缆线回收公司 | 沈阳真空机_沈阳真空包装机_沈阳大米真空包装机-沈阳海鹞真空包装机械有限公司 | 博莱特空压机|博莱特-阿特拉斯独资空压机品牌核心代理商 | 亮点云建站-网站建设制作平台| 二次元影像仪|二次元测量仪|拉力机|全自动影像测量仪厂家_苏州牧象仪器 | 富森高压水枪-柴油驱动-养殖场高压清洗机-山东龙腾环保科技有限公司 | 厂厂乐-汇聚海量采购信息的B2B微营销平台-厂厂乐官网 | 网带通过式抛丸机,,网带式打砂机,吊钩式,抛丸机,中山抛丸机生产厂家,江门抛丸机,佛山吊钩式,东莞抛丸机,中山市泰达自动化设备有限公司 | 商用绞肉机-熟肉切片机-冻肉切丁机-猪肉开条机 - 广州市正盈机械设备有限公司 | 中红外QCL激光器-其他连续-半导体连续激光器-筱晓光子 | 活性氧化铝球|氧化铝干燥剂|分子筛干燥剂|氢氧化铝粉-淄博同心材料有限公司 | 长沙发电机-湖南发电机-柴油发电机供应厂家-长沙明邦智能科技 | 冷库安装厂家_杭州冷库_保鲜库建设-浙江克冷制冷设备有限公司 | 必胜高考网_全国高考备考和志愿填报信息平台 | 权威废金属|废塑料|废纸|废铜|废钢价格|再生资源回收行情报价中心-中废网 | X光检测仪_食品金属异物检测机_X射线检测设备_微现检测 | 广州展览制作|展台制作工厂|展览设计制作|展览展示制作|搭建制作公司 | 临时厕所租赁_玻璃钢厕所租赁_蹲式|坐式厕所出租-北京慧海通 | 钢制暖气片散热器_天津钢制暖气片_卡麦罗散热器厂家 |