博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode刷题169 求众数 Majority Element(简单) Python Java
阅读量:4130 次
发布时间:2019-05-25

本文共 1717 字,大约阅读时间需要 5 分钟。

题目大意:

给定一个大小为 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。

你可以假设数组是非空的,并且给定的数组总是存在众数。

示例 1:

输入: [3,2,3]输出: 3

示例 2:

输入: [2,2,1,1,1,2,2]输出: 2

解法1:

from collections import Counterclass Solution(object):    def majorityElement(self, nums):        """        :type nums: List[int]        :rtype: int        """        tmp = Counter(nums).most_common()  # 利用Counter统计出现次数        for i in range(len(tmp)):            if tmp[i][1] > len(nums) / 2:  # 谁满足大于n/2就返回谁,题目已经说非空切一定存在众数,所以不做其他情况的讨论了。                return tmp[i][0]

解法2:

众数是指在数组中出现次数大于⌊ n/2 ⌋ 的元素。那么问题就很容易了,我们可以先将nums排序,然后返回中间元素的值即可(众数的个数大于一半,排好序的nums中间元素一定是众数)

class Solution:    def majorityElement(self, nums):        """        :type nums: List[int]        :rtype: int        """        nums.sort()        return nums[len(nums)//2]

在pyhon3中是真除法: 3/2=1.5

地板除是//,是取整数位: 3//2=1

表示求余数: 5%2=1

 

以下是Java版本:

题目大意:给定一个数组,找这个数组中的主元素,主元素是元素出现次数大于 n/2 的元素。 假设给定的数组非空,主元素都存在。 

解题思路: 用一个标记cnt记录某个元素出现的次数,如果后面的元素和它相同就加一,有一个元素和他不相同就减一,当cnt小于等于0时重新记录新的元素。

分析如下:

从头到尾扫描一遍数组,记录当前的majority elementcount

1.	public class Solution {  2.	    public int majorityElement(int[] num) {  3.	        if(num.length < 3) return num[0];  4.	        int majority = num[0];  // 用于记录主元素,假设第一个是主元素5.	        int count = 1;  // 用于抵消数的个数6.	        //1,1,1,1,2,1,3,1,2,2,2,2,2,2,  7.	        for (int i = 1; i < num.length; ++i) {  // 从第二个元素开始到最后一个元素8.	            if (count == 0) {  // 如果两个数相同就不能抵消9.	                majority = num[i];  // 记录最后不可以抵消的数10.	                ++count;  11.	            } else if (num[i] == majority)  {  12.	                ++count;  13.	            } else {  14.	                --count;  15.	            }  16.	        }  17.	        return majority;  18.	    }  19.	}

 

转载地址:http://xsuvi.baihongyu.com/

你可能感兴趣的文章
OpenFeign学习(三):OpenFeign配置生成代理对象
查看>>
OpenFeign学习(四):OpenFeign的方法同步请求执行
查看>>
OpenFeign学习(五):OpenFeign请求结果处理及重试控制
查看>>
OpenFeign学习(六):OpenFign进行表单提交参数或传输文件
查看>>
Ribbon 学习(二):Spring Cloud Ribbon 加载配置原理
查看>>
Ribbon 学习(三):RestTemplate 请求负载流程解析
查看>>
深入理解HashMap
查看>>
XML生成(一):DOM生成XML
查看>>
XML生成(三):JDOM生成
查看>>
Ubuntu Could not open lock file /var/lib/dpkg/lock - open (13:Permission denied)
查看>>
collect2: ld returned 1 exit status
查看>>
C#入门
查看>>
C#中ColorDialog需点两次确定才会退出的问题
查看>>
数据库
查看>>
nginx反代 499 502 bad gateway 和timeout
查看>>
linux虚拟机安装tar.gz版jdk步骤详解
查看>>
python实现100以内自然数之和,偶数之和
查看>>
python数字逆序输出及多个print输出在同一行
查看>>
苏宁产品经理面经
查看>>
百度产品经理群面
查看>>