LeetCode - Easy - 169. Majority Element

Topic

  • Array
  • Divide and Conquer
  • Bit Manipulation

Description

https://leetcode.com/problems/majority-element/

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.

Example 1:

Input: [3,2,3]
Output: 3

Example 2:

Input: [2,2,1,1,1,2,2]
Output: 2

Analysis

方法一:使用排序

方法二:使用HashMap

方法三:Moore投票算法(我認為眾多方法中最優的)

方法四:位操作

方法五:硬幣正反算法(賭運氣,挺有趣)

方法六:分治算法

Submission

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;public class MajorityElement {// 方法一:使用排序public int majorityElement1(int[] nums) {Arrays.sort(nums);return nums[nums.length / 2];}// 方法二:使用Hashtablepublic int majorityElement2(int[] nums) {Map<Integer, Integer> myMap = new HashMap<Integer, Integer>();// Hashtable<Integer, Integer> myMap = new Hashtable<Integer, Integer>();int ret = 0;for (int num : nums) {if (!myMap.containsKey(num))myMap.put(num, 1);elsemyMap.put(num, myMap.get(num) + 1);if (myMap.get(num) > nums.length / 2) {ret = num;break;}}return ret;}// 方法三:Moore 投票算法public int majorityElement3(int[] nums) {int count = 0, ret = 0;for (int num : nums) {if (count == 0)ret = num;if (num != ret)count--;elsecount++;}return ret;}// 方法四:位操作1public int majorityElement4_1(int[] nums) {int[] bit = new int[32];for (int num : nums)for (int i = 0; i < 32; i++)if ((num >> (31 - i) & 1) == 1)bit[i]++;int ret = 0;for (int i = 0; i < 32; i++) {bit[i] = bit[i] > nums.length / 2 ? 1 : 0;ret += bit[i] * (1 << (31 - i));}return ret;}// 方法四:位操作2public int majorityElement4_2(int[] nums) {int majority = 0;for (int i = 0, mask = 1; i < 32; i++, mask <<= 1) {int bits = 0;for (int num : nums) {if ((num & mask) > 0) {bits++;}}if (bits > nums.length / 2) {majority |= mask;}}return majority;}// 方法五:概率計算public int majorityElement5(int[] nums) {int n = nums.length, candidate = 0;while (true) {candidate = nums[(int) (Math.random() * n)];int counter = 0;for (int num : nums) {if (num == candidate) {counter++;}}if (counter > n / 2) {break;}}return candidate;}// 方法六:分治算法public int majorityElement6(int[] nums) {return findMajority(nums, 0, nums.length - 1);}private int findMajority(int[] nums, int low, int high) {if (low == high)return nums[low];int mid = low + (high - low) / 2;int left = findMajority(nums, low, mid);int right = findMajority(nums, mid + 1, high);if (left == right)return left;int countLeft = getFreq(nums, left, low, mid);int countRight = getFreq(nums, right, mid + 1, high);if (countLeft > countRight)return left;return right;}private int getFreq(int[] nums, int val, int low, int high) {int res = 0;for (int i = low; i <= high; i++) {if (nums[i] == val)res++;}return res;}}

Test

import static org.junit.Assert.*;
import org.junit.Test;public class MajorityElementTest {@Testpublic void test() {MajorityElement obj = new MajorityElement();int[][] array = {{1, 1, 1, 1, 1, 3, 4, 5}, {3, 2, 3}, {2, 2, 1, 1, 1, 2, 2}};assertEquals(1, obj.majorityElement1(array[0]));assertEquals(3, obj.majorityElement1(array[1]));assertEquals(2, obj.majorityElement1(array[2]));assertEquals(1, obj.majorityElement2(array[0]));assertEquals(3, obj.majorityElement2(array[1]));assertEquals(2, obj.majorityElement2(array[2]));assertEquals(1, obj.majorityElement3(array[0]));assertEquals(3, obj.majorityElement3(array[1]));assertEquals(2, obj.majorityElement3(array[2]));assertEquals(1, obj.majorityElement4_1(array[0]));assertEquals(3, obj.majorityElement4_1(array[1]));assertEquals(2, obj.majorityElement4_1(array[2]));assertEquals(1, obj.majorityElement4_2(array[0]));assertEquals(3, obj.majorityElement4_2(array[1]));assertEquals(2, obj.majorityElement4_2(array[2]));assertEquals(1, obj.majorityElement5(array[0]));assertEquals(3, obj.majorityElement5(array[1]));assertEquals(2, obj.majorityElement5(array[2]));assertEquals(1, obj.majorityElement6(array[0]));assertEquals(3, obj.majorityElement6(array[1]));assertEquals(2, obj.majorityElement6(array[2]));}
}

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

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

相關文章

java 靜態方法 異常_java空指針異常與靜態方法

從一道經典面試題說起&#xff0c;public class HaHa {public static void haha(){System.out.println("haha");}public static void main(String[] args){((HaHa)null).haha();}}打印結果 haha。這段題考查兩點知識&#xff0c;java的空指針異常和靜態方法。1&#…

java中的asList_Java中的Arrays.asList()方法

Arrays.asList()返回一個List&#xff0c;但是這種情況下&#xff0c;其底層的實現是一個final數組&#xff0c;因此不能調整其尺寸如下代碼片段&#xff1a;package chapter11.t1;import java.util.*;public class AddingGroups {public static void main(String[] args) {Lis…

java控制面板作用_Java

1. JAVA 的特性和優勢(1) Java的核心優勢 跨平臺/可移植性(2) 其他特性 安全性&#xff1b;面對對象&#xff1b;簡單性&#xff1b;高性能&#xff1b;分布式&#xff1b;多線程&#xff1b;健壯性&#xff1b;① 強大的生態系統(3) Java與C的關系 Java是C的簡化版(C—)2. JAV…

java es 數據批量導入_ElasticSearch—Java批量導入導出

網上找了很多&#xff0c;我的es是2.3.5版本&#xff0c;網上的客戶端最少都是5.x版本&#xff0c;所以沒有能用的。自己整合了一下 2.3.5版本的。pom文件&#xff1a;org.elasticsearchelasticsearch2.3.5com.alibabafastjson1.1.35org.apache.commonscommons-io1.3.2org.apac…

java原始模型模式_java設計模式--原始模型模式

簡介原始模型模式屬于對象的創建模式。通過一個原型對象來指明要創建對象的類型&#xff0c;然后用復制原型對象的方法來創建出更多同類型的對象。Java所有的類都是從java.lang.Object類繼承來的&#xff0c;Object類提供clone()方法對對象進行復制。一般調用clone()方法需要滿…

Windows的命令行窗口運行Python時,如何清屏?

問題 如標題 解法 import os os.system("cls")參考 python實現清屏

手寫文字識別java_java 手寫文字圖片識別提取 百度API

package org.fh.util;import org.json.JSONObject;import java.io.BufferedReader;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.URL;import java.util.List;import java.util.Map;/*** 說明&#xff1a;獲取文字識別token類* from&am…

LeetCode - Easy - 191. Number of 1 Bits

Topic Bit Manipulation Description https://leetcode.com/problems/number-of-1-bits/ Write a function that takes an unsigned integer and returns the number of ‘1’ bits it has (also known as the Hamming weight). Note: Note that in some languages such …

java并行計算同步返回_Java大文本并行計算實現過程解析

Java大文本并行計算實現過程解析簡單提高文本讀取效率&#xff0c;使用BufferedReader是個不錯的選擇。速度最快的方法是MappedByteBuffer&#xff0c;但是&#xff0c;相比BufferedReader而言&#xff0c;效果不是非常明顯。也就是說&#xff0c;后者雖然快&#xff0c;但也快…

wgs utm java,Java,將經緯度轉換為UTM

Does anyone know of a way, in Java, to convert an earth surface position from lat, lon to UTM (say in WGS84)? Im currently looking at Geotools but unfortunately the solution is not obvious.解決方案I was able to use Geotools 2.4 to get something that works…

java 指定時間轉換_Java中使用Calendar進行獲取指定時間,使用SimpleDateFormat進行格式化轉換...

java中使用Calendar獲取指定的時間public class DateTranslate {/*** 獲取指定日期的間隔月份的第一天的日期* param date* param sep* return*/public static Date getMonthFirstDay(Date date, Integer sep) {Calendar cal Calendar.getInstance();cal.setTime(getThisWeekM…

java mvc 菜鳥_【java框架】SpringMVC(1)--SpringMVC入門

1.SpringMVC框架認識Spring MVC是一個基于MVC模式的Web框架&#xff0c;SpringMVC作為Spring中的一個模塊&#xff0c;它與Spring能夠無縫集成&#xff0c;主要用于解決企業Web開發中常見的問題&#xff1a;如參數接收、文件上傳、表單驗證、國際化等等。2.SpringMVC HelloWorl…

php設置cookie 域名,php如何設置cookie對整個域名有效?

php設置cookie對整個域名有效的方法&#xff1a;由setcookie函數讓cookie對整個域名有效&#xff0c;代碼為【setcookie("cookie_test", this is cookie test, time()3600,"/",“】。php設置cookie對整個域名有效的方法&#xff1a;默認情況下的cookie僅對…

php 配置 gd2,配置PHP對gd庫的支持

搭建zabbix的時候遇到有對PHP的需求檢測&#xff0c;發現沒有對gd的支持&#xff0c;記錄下。。。GD庫是php處理圖形的擴展庫&#xff0c;它提供了一系列用來處理圖片的API&#xff0c;使用GD庫可以處理圖片&#xff0c;或者生成圖片&#xff0c;也可以給圖片加水印。1、安裝zl…

我的世界一個程序導致JAVA,Java地位無可動搖的12個原因

如今&#xff0c;面對曾經在程序員中被各種新技術掩蓋直至堙滅的技術值得懷念。猶如COBOL這當年被老程序員們尊為神器的語言如今也基本沒有價值。而Java作為現代程序員的中堅力量在這點上或許會成為下一個COBOL。有關JAVA的技術賣出多少本書已經是一個很久遠的記憶了。現處中年…

php 自定義格式化,PHP自定義函數格式化json數據示例

本文實例講述了PHP自定義函數格式化json數據的方法。分享給大家供大家參考&#xff0c;具體如下&#xff1a;/*** Formats a JSON string for pretty printing** param string $json The JSON to make pretty* param bool $html Insert nonbreaking spaces and s for tabs and …

php 單選框選中事件,html中的checkbox和radio事件選擇用法詳解

radio注冊了click事件以后&#xff0c;神奇的是用鍵盤上的上下左右選擇時&#xff0c;居然會觸發鼠標事件&#xff0c;滾輪也會觸發&#xff0c;這種神奇的事情在mousedown下面是不會發生的。(webkit不能使用上下左右選擇)checkbox注冊click事件后&#xff0c;奇跡再次上演&…

java水文模型,分布式水文模型.ppt

分布式水文模型ppt課件第九章分布式水文模擬技術 第九章 分布式水文模擬技術 9.1 分布式水文模型的發展 9.1.1 分布式水文模型的研究進展 9.1.1.2 幾點討論 9.1.2 分布式水文模型的發展 9.2 基于DEM的流域分布式水文模型 9.2.1 流域水文過程及其數學模擬 流域水循環過程示意圖 …

php 實現的n,php 實現數據N等分。

本例給出實現3等分的代碼和運行結果。在保證&#xff0c;每一個部分都不會宕機的情況下&#xff0c;這種算法是最簡單的。否則就用一致性哈希算法。公式原理&#xff1a;求余算法: hash(object)%Nfor($i 1;$i<100;$i){$result crc32($i) % 3;echo "i:".$i . &qu…

ccf json解析 java,【求助】e4a json解析 求助大佬幫忙老看下怎么取?

[PHP] 純文本查看 復制代碼[{"title":"\u4e1c\u98ce\u7834","url":"\/tv\/QrRobH7kTGTqNX.html","star":"\u4e3b\u6f14\uff1a\u5f20\u7b11\u541b \u5f20\u94ce \u725b\u4e3d\u71d5 \u5218\u5c0f\u950b \u68a6\u6960&qu…