229. 求眾數 II

229. 求眾數 II

給定一個大小為 n 的整數數組,找出其中所有出現超過 ? n/3 ? 次的元素。

示例 1:輸入:[3,2,3]
輸出:[3]示例 2:輸入:nums = [1]
輸出:[1]示例 3:輸入:[1,1,1,3,3,2,2,2]
輸出:[1,2]

解題思路

摩爾投票法的變種,維護出現頻次最大的兩個元素,如果新元素不和這兩個元素任意一個相等,則對這兩個元素的出現頻次進行抵消,一旦頻次為0,最大的兩個元素則被新加入的元素替換替換

  • 假設只有一個元素出現超過 ? n/3 ? 次的元素,所以元素分為了2批,一批為出現超過 ? n/3 ? 次的元素n,另一批為除此以外的少于2/3元素a,在最極端的情況下,我們n中的元素不斷被抵消,而a中的元素每次抵消也需要消耗兩個元素,因為n的出現次數是大于1/3的,所以即使每次抵消3個元素以后,n最后仍然會剩余元素。

  • 假設只有一個元素出現超過 ? n/3 ? 次的元素,所以元素分為了3批,兩批為出現超過 ? n/3 ? 次的元素n1,n2,另一批為除此以外的少于1/3元素a,在最極端的情況下,最大元素為n1和a,因此新元素n2不斷加入,來抵消n1和a的頻次,但是因為n2的出現次數必定大于a,所以a最先會被抵消完,所以最大的元素就會被替換成為n1和n2

代碼

func majorityElement(nums []int) []int {n1,n2,cnt1,cnt2:=0,0,0,0for _,i := range nums {if cnt1>0&&i == n1 {cnt1++} else if cnt2>0&&i == n2 {cnt2++} else if cnt1 == 0 {n1 = icnt1++} else if cnt2 == 0 {n2 = icnt2++} else {cnt1--cnt2--}}v1,v2:=0,0for _,i := range nums {if cnt1>0&&i==n1 {v1++}if cnt2>0&&i==n2 {v2++}}res := []int{}if cnt1>0&&v1>len(nums)/3 {res = append(res, n1)}if cnt2>0&&v2>len(nums)/3 {res = append(res, n2)}return res
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/389925.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/389925.shtml
英文地址,請注明出處:http://en.pswp.cn/news/389925.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

寫給Java開發者看的JavaScript對象機制

幫助面向對象開發者理解關于JavaScript對象機制 本文是以一個熟悉OO語言的開發者視角,來解釋JavaScript中的對象。 對于不了解JavaScript 語言,尤其是習慣了OO語言的開發者來說,由于語法上些許的相似會讓人產生心理預期,JavaScrip…

Pythonic---------詳細講解

作者:半載流殤 鏈接:https://zhuanlan.zhihu.com/p/35219750 來源:知乎 著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。Pythonic,簡言之就是以Python這門語言獨特的方式寫出既簡潔又優美的代碼…

大數據ab 測試_在真實數據上進行AB測試應用程序

大數據ab 測試Hello Everyone!大家好! I am back with another article about Data Science. In this article, I will write about what is A-B testing and how to use it on real life data-set to compare two advertisement methods.我回來了另一篇有關數據科…

492. 構造矩形

492. 構造矩形 作為一位web開發者, 懂得怎樣去規劃一個頁面的尺寸是很重要的。 現給定一個具體的矩形頁面面積,你的任務是設計一個長度為 L 和寬度為 W 且滿足以下要求的矩形的頁面。要求: 你設計的矩形頁面必須等于給定的目標面積。 寬度 …

node:爬蟲爬取網頁圖片

前言 周末自己在家閑著沒事,刷著微信,玩著手機,發現自己的微信頭像該換了,就去網上找了一下頭像,看著圖片,自己就想著作為一個碼農,可以把這些圖片都爬取下來做成一個微信小程序,說干…

如何更好的掌握一個知識點_如何成為一個更好的講故事的人3個關鍵點

如何更好的掌握一個知識點You’re launching a digital transformation initiative in the middle of the ongoing pandemic. You are pretty excited about this big-ticket investment, which has the potential to solve remote-work challenges that your organization fac…

centos 搭建jenkins+git+maven

gitmavenjenkins持續集成搭建發布人:[李源] 2017-12-08 04:33:37 一、搭建說明 系統:centos 6.5 jdk:1.8.0_144 jenkins:jenkins-2.93-1.1 git:git-2.9.0 maven:Maven 3.3.9 二、部署 2.1、jdk安裝 1)下…

638. 大禮包

638. 大禮包 在 LeetCode 商店中, 有 n 件在售的物品。每件物品都有對應的價格。然而,也有一些大禮包,每個大禮包以優惠的價格捆綁銷售一組物品。 給你一個整數數組 price 表示物品價格,其中 price[i] 是第 i 件物品的價格。另有…

記錄一次spark連接mysql遇到的問題

在使用spark連接mysql的過程中報錯了,錯誤如下 08:51:32.495 [main] ERROR - Error loading factory org.apache.calcite.jdbc.CalciteJdbc41Factory java.lang.NoClassDefFoundError: org/apache/calcite/linq4j/QueryProviderat java.lang.ClassLoader.defineCla…

什么事數據科學_如果您想進入數據科學,則必須知道的7件事

什么事數據科學No way. No freaking way to enter data science any time soon…That is exactly what I thought a year back.沒門。 很快就不會出現進入數據科學的怪異方式 ……這正是我一年前的想法。 A little bit about my data science story: I am a complete beginner…

python基礎03——數據類型string

1. 字符串介紹 在python中,引號中加了引號的字符都被認為是字符串。 1 namejim 2 address"beijing" 3 msg My name is Jim, I am 22 years old! 那單引號、雙引號、多引號有什么區別呢? 1) 單雙引號木有任何區別,部分情況 需要考慮…

Java基礎-基本數據類型

Java中常見的轉義字符: 某些字符前面加上\代表了一些特殊含義: \r :return 表示把光標定位到本行行首. \n :next 表示把光標定位到下一行同樣的位置. 單獨使用在某些平臺上會產生不同的效果.通常這兩個一起使用,即:\r\n. 表示換行. \t :tab鍵,長度上相當于四個或者是八個空格 …

季節性時間序列數據分析_如何指導時間序列數據的探索性數據分析

季節性時間序列數據分析為什么要進行探索性數據分析? (Why Exploratory Data Analysis?) You might have heard that before proceeding with a machine learning problem it is good to do en end-to-end analysis of the data by carrying a proper exploratory …

TortoiseGit上傳項目到GitHub

1. 簡介 gitHub是一個面向開源及私有軟件項目的托管平臺,因為只支持git 作為唯一的版本庫格式進行托管,故名gitHub。 2. 準備 2.1 安裝git:https://git-scm.com/downloads。無腦安裝 2.2 安裝TortoiseGit(小烏龜):https://torto…

496. 下一個更大元素 I

496. 下一個更大元素 I 給你兩個 沒有重復元素 的數組 nums1 和 nums2 ,其中nums1 是 nums2 的子集。 請你找出 nums1 中每個元素在 nums2 中的下一個比其大的值。 nums1 中數字 x 的下一個更大元素是指 x 在 nums2 中對應位置的右邊的第一個比 x 大的元素。如果…

利用PHP擴展Taint找出網站的潛在安全漏洞實踐

一、背景 筆者從接觸計算機后就對網絡安全一直比較感興趣,在做PHP開發后對WEB安全一直比較關注,2016時無意中發現Taint這個擴展,體驗之后發現確實好用;不過當時在查詢相關資料時候發現關注此擴展的人數并不多;最近因為…

美團騎手檢測出虛假定位_在虛假信息活動中檢測協調

美團騎手檢測出虛假定位Coordination is one of the central features of information operations and disinformation campaigns, which can be defined as concerted efforts to target people with false or misleading information, often with some strategic objective (…

869. 重新排序得到 2 的冪

869. 重新排序得到 2 的冪 給定正整數 N ,我們按任何順序(包括原始順序)將數字重新排序,注意其前導數字不能為零。 如果我們可以通過上述方式得到 2 的冪,返回 true;否則,返回 false。 示例 …

org.apache.maven.archiver.MavenArchiver.getManifest

eclipse導入新的maven項目時,pom.xml第一行報錯: org.apache.maven.archiver.MavenArchiver.getManifest(org.apache.maven.project.MavenProject, org.apache.maven.archiver.MavenArchiveConfiguration) 解決辦法: help -> Install New…

殺進程常用命令

殺進程命令pkill 進程名killall 進程名 # 平緩kill -HUP pid # 平緩kill -USR2 pidkill pid (-9 不要使用)轉載于:https://www.cnblogs.com/jmaly/p/9492406.html