日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

LeetCode.961-2N数组中N次重复的元素(N-Repeated Element in Size 2N Array)

發(fā)布時(shí)間:2025/7/14 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode.961-2N数组中N次重复的元素(N-Repeated Element in Size 2N Array) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

這是悅樂(lè)書(shū)的第365次更新,第393篇原創(chuàng)

01 看題和準(zhǔn)備

今天介紹的是LeetCode算法題中Easy級(jí)別的第227題(順位題號(hào)是961)。在大小為2N的數(shù)組A中,存在N+1個(gè)唯一元素,并且這些元素中的一個(gè)重復(fù)N次。

返回重復(fù)N次的元素。例如:

輸入:[1,2,3,3]
輸出:3

輸入:[2,1,2,5,3,2]
輸出:2

輸入:[5,1,5,2,5,3,5,4]
輸出:5

注意

  • 4 <= A.length <= 10000

  • 0 <= A [i] <10000

  • A.length是偶數(shù)

02 第一種解法

題目的意思是找數(shù)組A中出現(xiàn)了N/2次的數(shù),其中N為數(shù)組A的長(zhǎng)度。使用HashMap,key為數(shù)組元素,value為其出現(xiàn)次數(shù),先將A中的元素初始化進(jìn)HashMap中,然后遍歷HashMap,找到value等于N/2的key返回即可。

public int repeatedNTimes(int[] A) {Map<Integer, Integer> map = new HashMap<Integer, Integer>();for (int n : A) {map.put(n, map.getOrDefault(n, 0)+1);}int half = A.length/2;for (Integer key : map.keySet()) {if (map.get(key) == half) {return key;}}return -1; }


03 第二種解法

同樣是先記數(shù)再查找的思路,將第一種解法的HashMap換成int數(shù)組,長(zhǎng)度為10001,新數(shù)組count的索引為A中的元素,值為A中元素的出現(xiàn)次數(shù),然后遍歷count數(shù)組,返回其中值等于N/2的索引,N為數(shù)組A的長(zhǎng)度。

public int repeatedNTimes2(int[] A) {int[] count = new int[10001];for (int n : A) {count[n]++;}int half = A.length/2;for (int i=0; i<count.length; i++) {if (count[i] == half) {return i;}}return -1; }


04 第三種解法

換一種角度來(lái)看,把數(shù)組中的重復(fù)元素找到就行,而去重首選HashSet,遍歷A中的元素,如果HashSet中已經(jīng)存在當(dāng)前元素,即此元素就是要找的多次出現(xiàn)的元素。

public int repeatedNTimes3(int[] A) {Set<Integer> set = new HashSet<Integer>();for (int n : A) {if (set.contains(n)) {return n;} else {set.add(n);}}return -1; }


05 第四種解法

和第三種解法的思路相同,只是將HashSet換成了int數(shù)組。

public int repeatedNTimes4(int[] A) {int[] count = new int[10001];for (int n : A) {if(++count[n] >= 2) {return n;}}return -1; }


06 第五種解法

在第四種解法的基礎(chǔ)上,做進(jìn)一步簡(jiǎn)化,使用字符串代替。新建一個(gè)字符串str,如果當(dāng)前元素沒(méi)有出現(xiàn)過(guò)在str中,就拼接到str上,反之就是str中已經(jīng)存在了該元素,返回該元素即可。

public int repeatedNTimes5(int[] A) {String str = "";for (int n : A) {if (str.indexOf(n+"") < 0) {str += n;} else {return n;}}return -1; }


07 第六種解法

直接使用兩層循環(huán),匹配相等的元素。

public int repeatedNTimes6(int[] A) {int n = A.length;for (int i=0; i<n; i++) {for (int j=i+1; j<n; j++) {if (A[i] == A[j]) {return A[i];}}}return -1; }


08 第七種解法

此解法來(lái)自LeetCode給的參答,這個(gè)思路很奇妙,算是在第六種解法基礎(chǔ)上的進(jìn)一步簡(jiǎn)化。
同樣使用兩層循環(huán),但是不像第六種解法那樣每次都是比較相鄰的元素,而是分3次跳著比較,第一次是比較相鄰元素,第二次是比較間隔1位的元素,第三次是比較間隔2位的元素,將A切分成4個(gè)長(zhǎng)度為一組的子數(shù)組,將其中的元素與其距離1、2、3的元素做比較,至少會(huì)存在一個(gè)重復(fù)元素在其中。

public int repeatedNTimes7(int[] A) {int n = A.length;for (int i=1; i<=3; i++) {for (int j=0; j<n-i; j++) {if (A[j] == A[j+i]) {return A[i];}}}return -1; }


09 小結(jié)

算法專題目前已連續(xù)日更超過(guò)七個(gè)月,算法題文章233+篇,公眾號(hào)對(duì)話框回復(fù)【數(shù)據(jù)結(jié)構(gòu)與算法】、【算法】、【數(shù)據(jù)結(jié)構(gòu)】中的任一關(guān)鍵詞,獲取系列文章合集。

以上就是全部?jī)?nèi)容,如果大家有什么好的解法思路、建議或者其他問(wèn)題,可以下方留言交流,點(diǎn)贊、留言、轉(zhuǎn)發(fā)就是對(duì)我最大的回報(bào)和支持!

轉(zhuǎn)載于:https://www.cnblogs.com/xiaochuan94/p/11094905.html

總結(jié)

以上是生活随笔為你收集整理的LeetCode.961-2N数组中N次重复的元素(N-Repeated Element in Size 2N Array)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。