题目链接:力扣

思路:数据大于floor(n/3)向下取整的数最多只有两个(仔细想想),或者1个,或者没有。这样的话就采取类似最近很火的游戏“羊了个羊”消除,当然区别就是我们槽位只有2个,点击第三个的时候只有不一样这三个才会同时消除,如果相同就叠在对应的槽位上,这样最后剩下的两个槽位上面的值才有可能大于floor(n/3),为什么说有可能,因为存在一种特殊情况:【3,2,3】,这种情况下通过我们的算法最后会出现,第一个槽位剩下3,第二个槽位剩下2,但是只有3是满足的,所以最后我们再把这两个值验证一下即可。别的能消除的一定不会大于floor(n/3),因为消除的是三个不一样的数。

两次for循环,所以时间复杂度为O(n)。

空间上面我们只开了几个变量,所以时间复杂度O(1)。

上代码:

class Solution {fun majorityElement(nums: IntArray): List<Int> {val count = nums.size / 3var numOne: Int? = nullvar numTwo: Int? = nullvar numOneCount = 0var numTwoCount = 0nums.forEach { x ->when (x) {numOne -> numOneCount++numTwo -> numTwoCount++else -> {when (null) {numOne -> {numOne = xnumOneCount++}numTwo -> {numTwo = xnumTwoCount++}else -> {numOneCount--if (numOneCount == 0) numOne = nullnumTwoCount--if (numTwoCount == 0) numTwo = null}}}}}numOneCount = 0numTwoCount = 0nums.forEach { x ->when {numOne != null && x == numOne -> numOneCount++numTwo != null && x == numTwo -> numTwoCount++}}val list = mutableListOf<Int>()if (numOneCount > count) numOne?.let { list.add(it) }if (numTwoCount > count) numTwo?.let { list.add(it) }return list}
}

229. 多数元素 II相关推荐

  1. 【快乐水题】229. 求众数 II

    原题: 力扣链接:229. 求众数 II 题目简述: 给定一个大小为 n 的整数数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素. 解题思路 1.通过哈希表来计算出现次数 2.if(k == (n ...

  2. 摩尔投票法(力扣- -229. 求众数 II)

    摩尔投票法(力扣- -229. 求众数 II) 文章目录 摩尔投票法(力扣- -229. 求众数 II) 一.题目描述 二.分析 摩尔投票法 总结 三.代码 一.题目描述 二.分析 这道题如果用O(N ...

  3. java求众数_Java实现 LeetCode 229 求众数 II(二)

    229. 求众数 II 给定一个大小为 n 的数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素. 说明: 要求算法的时间复杂度为 O(n),空间复杂度为 O(1). 示例 1: 输入: [3,2, ...

  4. 算法---删除排序链表中的重复元素 II

    删除排序链表中的重复元素 II 给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 .返回 已排序的链表 . 输入:head = [1,2,3,3,4,4,5] ...

  5. 【快乐水题】219. 存在重复元素 II

    原题: 力扣链接:219. 存在重复元素 II 题目简述: 给你一个整数数组 nums 和一个整数 k ,判断数组中是否存在两个 不同的索引 i 和 j ,满足 nums[i] == nums[j] ...

  6. 503. 下一个更大元素 II

    503. 下一个更大元素 II 题目 我的解答 分析 解答 官方解法 题目 给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素.数字 x 的下一个更大的元素是 ...

  7. list元素求和_LeetCode刷题实战82:删除排序链表中的重复元素 II

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  8. 程序员面试金典——番外篇之下一个较大元素II

    程序员面试金典--番外篇之下一个较大元素II Solution1:我的答案,时间复杂度为O(n2)O(n2)O(n^2) 垃圾算法 class NextElement { public:vector& ...

  9. Leetcode 129求根节点到叶节点数字之和、104二叉树的最大深度、8字符串转换整数(atoi)、82删除排序链表中的重复元素II、204二分查找、94二叉树的中序遍历、144二叉树的前序遍历

    Top1:Leetcode 129求根节点到叶节点数字之和 官方题解:https://leetcode.cn/problems/sum-root-to-leaf-numbers/solution/qi ...

最新文章

  1. IntelliJ 发布 2020 RoadMap,中文版终于要来了?
  2. Vue004_条件渲染
  3. 蜕变与成长中的青春创作:评论家谈少数民族青年作家的创作
  4. java中find方法_Java Document.find方法代码示例
  5. linux系统libpcap安装方法
  6. MATLAB图自编码器
  7. c语言if全部用法,关于if的用法
  8. 操作系统概念(Operating System Concepts Ninth Edition恐龙书)阅读
  9. 个性化推荐算法(推荐系统)概要
  10. SDP中fingerprint的作用
  11. WTL for MFC Programmers, Part VI - Hosting ActiveX Controls
  12. 2022“美亚杯”第八届中国电子数据取证大赛-团队赛题目
  13. spboot开发的jar包开机自启
  14. 温度转换程序python代码_python温度转换华氏温度实现代码
  15. STM32机器人控制开发教程No.3 使用遥控控制电机/舵机(基于HAL库)
  16. NIVC-IPR[IPADDR]
  17. python开发环境部署以及调试教程
  18. eNSP配置防火墙进入Web界面
  19. BZOJ2295我爱你啊
  20. 包子凑数-蓝桥杯真题 线性方程组求解(c++实现)

热门文章

  1. 使用docker-compose 大杀器来部署服务 上
  2. argparse三步走使用说明
  3. JS 文本框内输入内容添加在页面与删除
  4. iMac mid 2011 升级内存
  5. 游戏笔记本计算机购买,现在值得买的游戏笔记本有哪些?求推荐好的游戏本电脑?...
  6. Java遍历Map的5种方法
  7. 一直在构建版本_升级成2.0版本的自己,生活会有什么不一样
  8. 智能开关控制通断为何不用可控硅了?
  9. AJAX常见面试题(修订版)
  10. 一文搞懂Ajax,附Ajax面试题