摘要:因?yàn)楸姅?shù)出現(xiàn)的次數(shù)必定大于,所以我們只要取第個(gè)位置上的元素,這個(gè)元素一定為我們要找的眾數(shù)。
題目詳情
Given an array of size n, find the majority element. The majority element is the element that appears more than ? n/2 ? times.You may assume that the array is non-empty and the majority element always exist in the array.思路輸入一個(gè)大小為n的數(shù)組,整個(gè)數(shù)組里面將會(huì)含有一個(gè)眾數(shù),即這個(gè)元素出現(xiàn)的次數(shù)大于n/2,我們需要找到并返回這個(gè)眾數(shù)
這道題也是一道關(guān)于數(shù)組的重復(fù)元素的問(wèn)題
首先我想到的辦法是,使用HashMap實(shí)現(xiàn),key是元素的值,value則是這個(gè)元素在當(dāng)前出現(xiàn)的次數(shù),一旦這個(gè)次數(shù)大于n/2,我們就可以停止我們的遍歷
但實(shí)際上,還有一種更簡(jiǎn)單的方法。因?yàn)楸姅?shù)出現(xiàn)的次數(shù)必定大于n/2,所以我們只要取第n/2個(gè)位置上的元素,這個(gè)元素一定為我們要找的眾數(shù)。
感謝@SegmentWarrior提供的解法三,不需要建立hashmap所產(chǎn)生的額外空間,同時(shí)時(shí)間復(fù)雜度為O(n)
解法一 HashMap//HashMap實(shí)現(xiàn) 時(shí)間復(fù)雜度O(n) public int majorityElement(int[] nums) { HashMap解法二 直接取n/2位置元素count = new HashMap (); int length = nums.length; if(length<=1){ return nums[0]; } for(int i=0;i length/2){ return nums[i]; } }else{ count.put(nums[i], 1); } } return -1; }
//思想:對(duì)于一個(gè)排序好的數(shù)組,第n/2的位置的元素一定是存在的這個(gè)眾數(shù) public int majorityElement(int[] nums) { Arrays.sort(nums); return nums[nums.length/2]; }解法三 對(duì)出現(xiàn)次數(shù)計(jì)數(shù)
public int majorityElement(int[] nums) { int res = nums[0]; int count = 1; for(int i=1;i1) count --; else res = nums[i]; } return res; }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/68375.html
摘要:當(dāng)時(shí)題目改成了小明收紅包,找出現(xiàn)次數(shù)超過(guò)一般的那個(gè)紅包,要求線性時(shí)間復(fù)雜度,也就是說(shuō)不能用排序排序算法最優(yōu)情況是。另外這個(gè)題在上的難度是哦,好傷心啊,當(dāng)初的我連這題都沒(méi)想出解法,真是夠年輕啊。 169. Majority Element Given an array of size n, find the majority element. The majority element i...
摘要:投票法復(fù)雜度思路設(shè)定一個(gè)和這個(gè)對(duì)應(yīng)的如果一個(gè)數(shù)和這個(gè)相等,那么就將增加,否則減少的數(shù)目。 LeetCode[169] Majority Element Given an array of size n, find the majority element. The majority element is the element that appears more than ? n/2...
摘要:小鹿題目算法思路摩爾投票算法題目的要求是讓我們求數(shù)組中超過(guò)一半數(shù)據(jù)以上相同的元素且總是存在的。 Time:2019/4/4Title: Majority Element 1Difficulty: easyAuthor: 小鹿 題目:Majority Element 1 Given an array of size n, find the majority element. The ...
摘要:題目鏈接題目分析給定一個(gè)數(shù)組,返回其中出現(xiàn)次數(shù)超過(guò)一半的元素。思路用函數(shù)計(jì)算元素出現(xiàn)次數(shù),用逆序排序結(jié)果,輸出第一個(gè)即可。最終代碼若覺(jué)得本文章對(duì)你有用,歡迎用愛(ài)發(fā)電資助。 D83 169. Majority Element 題目鏈接 169. Majority Element 題目分析 給定一個(gè)數(shù)組,返回其中出現(xiàn)次數(shù)超過(guò)一半的元素。 思路 用array_count_values函數(shù)計(jì)算...
摘要:,這是最基礎(chǔ)的最大投票算法。例如,和這兩個(gè)數(shù)組最后得到的分別為和,但是這并不影響答案的正確性。接下來(lái),我們可以對(duì)這個(gè)算法做一些簡(jiǎn)單的擴(kuò)展,我們當(dāng)前定義的的數(shù)量大于的元素。為當(dāng)前出現(xiàn)的次數(shù)。這意味著當(dāng)前這個(gè)數(shù)字就是這兩個(gè)等待的第三個(gè)數(shù)字。 Boyer-Moore:A Linear Time Majority Vote Alogrithm,這是最基礎(chǔ)的最大投票算法。 原文中提到:decid...
閱讀 3138·2021-10-12 10:11
閱讀 1840·2021-08-16 10:59
閱讀 2852·2019-08-30 15:55
閱讀 1228·2019-08-30 14:19
閱讀 2039·2019-08-29 17:03
閱讀 2472·2019-08-29 16:28
閱讀 3221·2019-08-26 13:47
閱讀 2889·2019-08-26 13:36