zoukankan      html  css  js  c++  java
  • 数组中出现次数超过一半的数字(Python and C++解法)

    题目:

    数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。你可以假设数组是非空的,并且给定的数组总是存在多数元素。

    示例 1:

    输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]
    输出: 2

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/shu-zu-zhong-chu-xian-ci-shu-chao-guo-yi-ban-de-shu-zi-lcof

    思路:

      如果数组中一个数字出现的次数超过了数组长度一半,那么它出现的次数比其他所有数字出现的次数,之和还要多,因此可以进行投票,正负相抵,假设众数票额为+1,其他票额为-1,那么最终票数之和>0,如果当前票数之和为0,那么设当前数字为众数,则最后一次假设的众数一定是真众数。

    Python解法:

     1 class Solution:
     2     def majorityElement(self, nums: List[int]) -> int:
     3         votes = 0  # 投票总和,假设众数票额为+1,其他为-1
     4         for num in nums:
     5             if votes == 0:  # 如果当前票数和为零,则假设当前的数字为众数
     6                 x = num
     7             if num == x:
     8                 votes += 1
     9             else:
    10                 votes -= 1
    11         return x

    C++解法:

     1 class Solution {
     2 public:
     3     int majorityElement(vector<int>& nums) {
     4         int votes = 0;
     5         int x;  // 假设的众数
     6         for(int i = 0; i < nums.size(); i++) {
     7             if(votes == 0)
     8                 x = nums[i];
     9             if(nums[i] == x)
    10                 votes += 1;
    11             else
    12                 votes -= 1;
    13         }
    14         return x;
    15     }
    16 };
  • 相关阅读:
    数据结构-链式结构-队列
    c数据结构-线性结构-队列
    栈的四则运算的运用
    C++/C—函数指针
    向显存写数据x8086
    结构体内存偏移量
    MFC-ComboBox控件的使用
    MFC的Edit text编辑框控件
    C/C++反汇编-各种表达式(加减乘)
    MFC- 学习控件-静态文本
  • 原文地址:https://www.cnblogs.com/kongzimengzixiaozhuzi/p/13300314.html
Copyright © 2011-2022 走看看