229. 多数元素 II
题目链接:力扣
思路:数据大于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相关推荐
- 【快乐水题】229. 求众数 II
原题: 力扣链接:229. 求众数 II 题目简述: 给定一个大小为 n 的整数数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素. 解题思路 1.通过哈希表来计算出现次数 2.if(k == (n ...
- 摩尔投票法(力扣- -229. 求众数 II)
摩尔投票法(力扣- -229. 求众数 II) 文章目录 摩尔投票法(力扣- -229. 求众数 II) 一.题目描述 二.分析 摩尔投票法 总结 三.代码 一.题目描述 二.分析 这道题如果用O(N ...
- java求众数_Java实现 LeetCode 229 求众数 II(二)
229. 求众数 II 给定一个大小为 n 的数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素. 说明: 要求算法的时间复杂度为 O(n),空间复杂度为 O(1). 示例 1: 输入: [3,2, ...
- 算法---删除排序链表中的重复元素 II
删除排序链表中的重复元素 II 给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 .返回 已排序的链表 . 输入:head = [1,2,3,3,4,4,5] ...
- 【快乐水题】219. 存在重复元素 II
原题: 力扣链接:219. 存在重复元素 II 题目简述: 给你一个整数数组 nums 和一个整数 k ,判断数组中是否存在两个 不同的索引 i 和 j ,满足 nums[i] == nums[j] ...
- 503. 下一个更大元素 II
503. 下一个更大元素 II 题目 我的解答 分析 解答 官方解法 题目 给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素.数字 x 的下一个更大的元素是 ...
- list元素求和_LeetCode刷题实战82:删除排序链表中的重复元素 II
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...
- 程序员面试金典——番外篇之下一个较大元素II
程序员面试金典--番外篇之下一个较大元素II Solution1:我的答案,时间复杂度为O(n2)O(n2)O(n^2) 垃圾算法 class NextElement { public:vector& ...
- Leetcode 129求根节点到叶节点数字之和、104二叉树的最大深度、8字符串转换整数(atoi)、82删除排序链表中的重复元素II、204二分查找、94二叉树的中序遍历、144二叉树的前序遍历
Top1:Leetcode 129求根节点到叶节点数字之和 官方题解:https://leetcode.cn/problems/sum-root-to-leaf-numbers/solution/qi ...
最新文章
- IntelliJ 发布 2020 RoadMap,中文版终于要来了?
- Vue004_条件渲染
- 蜕变与成长中的青春创作:评论家谈少数民族青年作家的创作
- java中find方法_Java Document.find方法代码示例
- linux系统libpcap安装方法
- MATLAB图自编码器
- c语言if全部用法,关于if的用法
- 操作系统概念(Operating System Concepts Ninth Edition恐龙书)阅读
- 个性化推荐算法(推荐系统)概要
- SDP中fingerprint的作用
- WTL for MFC Programmers, Part VI - Hosting ActiveX Controls
- 2022“美亚杯”第八届中国电子数据取证大赛-团队赛题目
- spboot开发的jar包开机自启
- 温度转换程序python代码_python温度转换华氏温度实现代码
- STM32机器人控制开发教程No.3 使用遥控控制电机/舵机(基于HAL库)
- NIVC-IPR[IPADDR]
- python开发环境部署以及调试教程
- eNSP配置防火墙进入Web界面
- BZOJ2295我爱你啊
- 包子凑数-蓝桥杯真题 线性方程组求解(c++实现)