题目链接:力扣

思路:数据大于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. [2016-04-19 15:46:03 - IceHoloReader1.0] Installation error: INSTALL_FAILED_CONFLICTING_PROVIDER [20
  2. Habana Labs
  3. ZOJ-3494 BCD Code (ac自动机+数位dp)
  4. 计算机应用乘法,计算机系统原理(十) 二进制整数的乘法运算和除法运算
  5. 如何开发rest接口服务_如何简化网络请求接口开发
  6. emacs python 缩进问题_Emacs python mode的问题
  7. 【JVM调优系列】----CPU过高的分析与解决方案
  8. 找不到FLANNConfig.cmake文件
  9. WebSocket API 学习笔记
  10. HTML5 css3 阴影效果
  11. Windows libyuv 引入 libjpeg
  12. 2020年过去了,我很怀念它
  13. linux条件变量cond,Linux C 条件变量cond的使用记录
  14. 22款奔驰S400L升级原厂主动氛围灯,H17钢琴条纹饰板等,浪漫奢华
  15. 520,用Python定制你的《本草纲目女孩》
  16. 2M字节Flash Rom存储器W25Q16/W25X16 认识Flash
  17. 模拟集成电路设计与分析——全差分放大器
  18. 三菱机械臂demo程序
  19. 状态标志与状态标志寄存器
  20. IntelliJ IDEA查看类层次结构图

热门文章

  1. 树莓派高级开发------总线地址、物理地址和虚拟地址的认识
  2. c语言中f的作用是什么,在C语言中printf中、《f》是什么?
  3. [MBTI]什么是MBTI – 第一篇
  4. Nginx显示500错误原因和解决方法
  5. 快手推出“原片”对标字节“醒图”,百亿修图市场好进吗?
  6. 高效易用的Word文档解密软件
  7. ios版android wear下载,非Android Wear用户福音,iOS版三星Gear手表管理app泄露
  8. 录屏时计算机休眠,为什么录屏是黑屏
  9. 五、项目管理五大过程组及十大知识领域
  10. 微信H5网页调用扫一扫功能(vue)