【剑指offer】面试题39:数组中出现次数超过一半的数字
初始化变量:将结果初始化为数组的第一个元素,并将计数器初始化为0。 遍历数组:对于数组中的每一个元素,检查它是否与当前结果相同。 提前返回:一旦计数器超过数组长度的一半,立即返回结果,因为这表示我们已经找到了多数元素。
发布日期:2021-04-30 21:01:22
浏览次数:106
分类:精选文章
本文共 1517 字,大约阅读时间需要 5 分钟。
public class Solution { public int majorityElement(int[] nums) { if (nums.length == 0) { return 0; } int result = nums[0]; int count = 0; for (int i = 0; i < nums.length; i++) { if (count == 0 && i != 0) { result = nums[i]; } if (nums[i] == result) { count++; } else { count--; } if (count > nums.length / 2) { return result; } } return result; }} 多数元素的寻找方法
在这个问题中,我们需要找到一个数字,它在数组中出现次数超过了数组长度的一半。这个问题可以通过遍历数组并统计每个数字的出现次数来解决。以下是详细的解决方案:
方法思路
我们可以通过以下步骤来解决这个问题:
- 如果计数器为0且当前元素与结果不同,则更新结果为当前元素。
- 如果当前元素与结果相同,则增加计数器;否则,减少计数器。
这种方法的时间复杂度是O(n),因为我们只需遍历数组一次。这使得该算法在处理较大数组时非常高效。
代码解释
public class Solution { public int majorityElement(int[] nums) { if (nums.length == 0) { return 0; } int result = nums[0]; int count = 0; for (int i = 0; i < nums.length; i++) { if (count == 0 && i != 0) { result = nums[i]; } if (nums[i] == result) { count++; } else { count--; } if (count > nums.length / 2) { return result; } } return result; }} 示例
输入:[1, 2, 3, 2, 2, 2, 5, 4, 2]输出:2
这个方法通过遍历数组并统计每个数字的出现次数,能够高效地找到出现次数超过一半的数字。
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2026年05月26日 06时15分08秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
PHP二维数组将重复键值合并重组成三维数组
2023-03-01
PHP二维数组转换为一维数组
2023-03-01
PHP二维数组重组
2023-03-01
PHP交换两个变量值
2023-03-01
php代码执行完整流程介绍
2023-03-01
PHP代码格式化工具phpcf常见问题解决方案
2023-03-01
PHP使用3DES算法加密解密字符串
2023-03-01
php使用memcached扩展的一个BUG
2023-03-01
PHP内核介绍及扩展开发指南—基础知识
2023-03-01
PHP写日志fwrite和file_put_contents的区别与性能
2023-03-01
PHP函数
2023-03-01
PHP函数__autoload失效原因(与smarty有关)
2023-03-01
PHP函数操作数字和汉字互转(100以内)
2023-03-01
PHP函数方法
2023-03-01
PHP删除指定目录下的所有文件和文件夹 | 删除指定文件
2023-03-01
php判断ip黑名单程序代码
2023-03-01
php判断复选框是否被选中的方法
2023-03-01
PHP判断指定目录下是否存在文件
2023-03-01
php判断数组是否为空
2023-03-01