- 浏览: 183559 次
- 性别:
- 来自: 济南
文章分类
最新评论
Majority Element
给定一个长度为n的数组,从中找出出现次数最多的元素,这个元素出现的次数多余[n/2]次。假设数组不为空并且始终存在一个majority元素。
解决这道题有很多种方法,但是时间复杂度和空间复杂度各不相同,在这里我们用三种不同的方法解这道题。
1,最简单的方法就是先将数组排好序,根据题意我们知道,出现最多的元素肯定是中间的元素。
我们直接调用Arrays的sort方法,这样时间复杂度是O(nlogn),空间复杂度为O(1)。代码如下:
2,第二种方法我们可以用哈希表来记录元素出现的次数,直到找到一个元素出现次数多于数组长度的一半就返回。这样空间复杂度为O(n),时间复杂度为O(n)。相当于用空间换时间,实现代码如下:
3,这是一个很巧妙的算法,叫做Moore Voting Algorithm。它专门用来处理出现次数最多元素的,它的时间复杂度为O(n),空间复杂度为O(1)。它的思想是在数组中找成对的元素,如果它们的值不相等,就忽略它们,相当于把它们删除;如果它们的值相等,那么就用一个变量来记录重复的次数。通过代码来理解更直观,代码如下:
给定一个长度为n的数组,从中找出出现次数最多的元素,这个元素出现的次数多余[n/2]次。假设数组不为空并且始终存在一个majority元素。
解决这道题有很多种方法,但是时间复杂度和空间复杂度各不相同,在这里我们用三种不同的方法解这道题。
1,最简单的方法就是先将数组排好序,根据题意我们知道,出现最多的元素肯定是中间的元素。
我们直接调用Arrays的sort方法,这样时间复杂度是O(nlogn),空间复杂度为O(1)。代码如下:
public class Solution { public int majorityElement(int[] nums) { Arrays.sort(nums); if(nums.length==1) { return nums[0]; } else { return nums[nums.length / 2]; } } }
2,第二种方法我们可以用哈希表来记录元素出现的次数,直到找到一个元素出现次数多于数组长度的一半就返回。这样空间复杂度为O(n),时间复杂度为O(n)。相当于用空间换时间,实现代码如下:
public class Solution { public int majorityElement(int[] nums) { HashMap<Integer, Integer> hm = new HashMap<Integer, Integer>(); int result = 0; for(int i = 0; i < nums.length; i++) { if(hm.containsKey(nums[i])) { hm.put(nums[i], hm.get(nums[i])+1); } else { hm.put(nums[i], 1); } if(hm.get(nums[i]) > nums.length/2) { result = nums[i]; break; } } return result; } }
3,这是一个很巧妙的算法,叫做Moore Voting Algorithm。它专门用来处理出现次数最多元素的,它的时间复杂度为O(n),空间复杂度为O(1)。它的思想是在数组中找成对的元素,如果它们的值不相等,就忽略它们,相当于把它们删除;如果它们的值相等,那么就用一个变量来记录重复的次数。通过代码来理解更直观,代码如下:
public class Solution { public int majorityElement(int[] nums) { int count = 0; int result = 0; for(int num : nums) { if(count == 0) result = num; if(result != num) { count --; } else { count ++; } } return result; } }
发表评论
-
498. Diagonal Traverse
2019-11-15 13:52 265Given a matrix of M x N eleme ... -
496 Next Greater Element I
2019-11-14 13:50 267You are given two arrays (witho ... -
Word Break II
2016-03-09 03:15 384Given a string s and a dictiona ... -
Insert Interval
2016-03-08 02:11 374Given a set of non-overlapping ... -
Merge Intervals
2016-03-07 05:25 497Given a collection of intervals ... -
Merge k Sorted Lists
2016-03-07 04:03 563Merge k sorted linked lists and ... -
Multiply Strings
2016-03-06 07:27 475Given two numbers represented a ... -
N-Queens II
2016-03-06 03:06 664Follow up for N-Queens problem. ... -
N-Queens
2016-03-06 02:47 469The n-queens puzzle is the prob ... -
First Missing Positive
2016-03-05 03:09 429Given an unsorted integer array ... -
Spiral Matrix
2016-03-04 03:39 575Given a matrix of m x n element ... -
Trapping Rain Water
2016-03-04 02:54 580Given n non-negative integers r ... -
Repeated DNA Sequences
2016-03-03 03:10 426All DNA is composed of a series ... -
Increasing Triplet Subsequence
2016-03-02 02:48 898Given an unsorted array return ... -
Maximum Product of Word Lengths
2016-03-02 01:56 930Given a string array words, fin ... -
LRU Cache
2016-02-29 10:37 602Design and implement a data str ... -
Super Ugly Number
2016-02-29 07:07 673Write a program to find the nth ... -
Longest Increasing Path in a Matrix
2016-02-29 05:56 842Given an integer matrix, find t ... -
Coin Change
2016-02-29 04:39 783You are given coins of differen ... -
Minimum Height Trees
2016-02-29 04:11 704For a undirected graph with tre ...
相关推荐
java郑 java_leetcode题解之Online Majority Element In Subarray.java
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 ⌋ times. You may assume that the array is non-...
在编程领域,寻找多数元素(Majority Element)是一项常见的任务,尤其在算法设计和数据处理中。多数元素指的是在一个整数数组中出现次数超过数组长度一半的元素。本主题将详细探讨如何用C++语言来解决这个问题。 ...
javascript js_leetcode题解之169-majority-element.js
c c语言_leetcode题解之0229_majority_element_ii
python python_leetcode题解之229_Majority_Element_II.py
至于春节期间红包问题,这是一个典型的“多数元素”问题,也称为“Majority Element”。在给定的红包金额列表中,存在一个金额出现的次数超过列表长度的一半。解决这个问题,可以使用摩尔投票法(Moore Voting ...
在计算机科学和数据分析领域,"主元素"(Majority Element)是一个重要的概念,尤其是在数据处理和算法设计中。主元素是指在给定的一组数字中出现次数超过数组长度一半的元素。如果存在这样的元素,那么它就是数组的...
15. 位操作问题:例如Majority Element(多数元素)、First Missing Positive(缺失的第一个正数)等,利用位操作可以高效处理。 16. 排序和搜索问题:例如Meeting Rooms II(会议室 II),要求数组中元素的正确...
- **找多数元素 (Majority Element)**:在数组中找出出现次数超过数组长度一半的元素。 - **最大子数组和 (Maximum Subarray)**:求解数组中连续子数组的最大和。 - **判断字符串是否为Anagram**:检查两个字符串...
27 | [Remove Element](https://leetcode.com/problems/remove-element/) | [C++](./C++/remove-element.cpp) [Python](./Python/remove-element.py) | _O(n)_ | _O(1)_ | Easy || 31 | [Next Permutation]...
leetcode有效期 algorithmTask 数据结构与算法练习 Task.1 数组 实现一个支持动态扩容的数组,支持增删改操作 ...中文版:https://leetcode-cn.com/problems/majority-element/ Missing Positive(求缺失
java lru leetcode leetcode_java Java版中的解决方案。 Dectinc_Chen 解决问题清单 已解决问题列表 [除Self之外的数组乘积](md/除Self.md之外的数组...II](md/Majority Element II.md) - 2015-09-22 [摘要范围](md/Sum
Find a majority element in an array of size 'n'3. Find the number occuring odd number of times in a given array of size 'n'4. Algorithm to reverse an array5. Algorithm to rotate array of size 'n' by ...
Majority Element LCCI Game of Life Find All Numbers Disappeared in an Array Shortest Unsorted Continuous Subarray Rotate Image 宝石与石头Jewels and Stones Kids With the Greatest Number of Candies 美团...
#169 Majority Element #171 Excel Sheet Column Number #217 Contains Duplicate #226 Invert Binary Tree #237 Delete Node in a Linked List #238 Product of Array Except Self #242 Valid Anagram #258 Add ...
Element II 解决方法:Majority Voting算法的变种。但是最终的算法实现形式,很难理解。 2018-08-19 19:16 LeetCode: 79. Word Search 解决方法:DFS LeetCode: 31. Next Permutation 解决方法:掌握排列组合的字典...
[C ++](./ Algorithms / Majority Element II / Source.cpp) 中等的 2015年7月4日 228 [C ++](./算法/摘要范围/Source.cpp) 简单的 2015年7月1日 227 [C ++](./ Algorithms / Basic Calculator II / Sour
majority element ii . 使用 "摩尔投票法"。 LCA 二叉树最近共同祖先问题. 递归结题的思路,在左子树、右子树查找两个节点,可能的结果有: 该节点就是其中的一个节点,则返回该节点 两个节点都不在左边,那么肯定都...