• 算法练习- LeetCode 剑指 Offer 39. 数组中出现次数超过一半的数字


    今日心情:生活在慢慢走上正轨,慢慢走总能达到想去的地方。

    题目描述:

    LeetCode 剑指 Offer 39. 数组中出现次数超过一半的数字

    数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。

    你可以假设数组是非空的,并且给定的数组总是存在多数元素。

     


    解题代码 1:(看的题解思路:投票法 时间复杂度O(n)+ 空间复杂度O(1))

    1. class Solution {
    2. public int majorityElement(int[] nums) {
    3. int vote = 0;
    4. int x = 0;
    5. for(int num : nums){
    6. if(vote == 0){
    7. x = num;
    8. }
    9. vote += (num == x) ? 1 : -1;
    10. }
    11. return x;
    12. }
    13. }

    解题代码 2:(自己想的思路:HasMap统计 时间复杂度O(n)+ 空间复杂度O(n))

    1. class Solution {
    2. public int majorityElement(int[] nums) {
    3. int half = nums.length/2;
    4. HashMap<Integer,Integer> map = new HashMap<>();
    5. for(int num: nums){
    6. if(!map.containsKey(num)){
    7. map.put(num,1);
    8. }else{
    9. map.put(num,map.get(num)+1);
    10. }
    11. }
    12. for(Map.Entry<Integer,Integer> entry : map.entrySet()){
    13. if(entry.getValue() > half){
    14. return entry.getKey();
    15. }
    16. }
    17. return -1;
    18. }
    19. }

    解题思路1:

    题解方法主要利用了题目中可以假设数组是非空的,并且给定的数组总是存在多数元素。所以一定存在这样的数,其出现次数超过数组半数。

    (1)可以判断如果当前投票数为 0 , 则将当前值保存起来,与下一个值进行比较,如果当前值与下一个值相等,则投票加1,否则投票-1;

    (2)然后当投票为0的时候就更新比较值;

    (3)遍历完成后投票值一定大于0,此时的保存的值就是出现次数超过数组半数的数。

    主要就是利用了该数出现次数一定是大于半数数组长度的特性。


    解题思路2:

    自己首先拿到题想到的就是使用HashMap进行统计,然后找到出现次数超过数组半数的值,操作时间复杂度为O(n), 空间复杂度为O(n)。看题解使用的投票方法可以将空间复杂度优化到  O(1)。

    (1)遍历数组,将所有数存入HashMap中,如果当前数不存在于HashMap,当前数作为key,值为1,如果当前数已经存在于HashMap中,则更新以当前数为key的值,获取以当前数为key的值然后加1进行更新;

    (2)遍历map,获取值大于半数数组长度的key;

    (3)返回找到的key值。


     

  • 相关阅读:
    LeetCode刷题(python版)——Topic70. 爬楼梯
    【HBuilder X】解决HBuilder X内置浏览器显示过大影响使用
    《RAPL: A Relation-Aware Prototype Learning Approach for Few-Shot Document-Level Relation Extraction》阅读笔记
    深度优先搜索详解
    Android 12.0 ota升级之SettingsProvider新增和修改系统数据相关功能实现
    正则表达式校验非0正数小数点后两位
    如何在Windows环境配置独立安装的 Nginx?
    天软特色因子看板 (2023.10 第03期)
    Live800:三点自测,你的客服系统该升级了吗?
    mapreduce综合应用案例 — 招聘数据清洗
  • 原文地址:https://blog.csdn.net/qq_41758969/article/details/125623518