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

2022-03-14  本文已影响0人  邦_

最简单的想法是= = 双循环 每次循环创建个临时变量来计数,当次数大于数组的一半的时候,返回这个数

func majorityElement(_ nums: [Int]) -> Int {

        for i in nums {
            
            var count = 0
            for j in nums {
                
                if i == j {
                    
                    count += 1
                }
                
            }
            if count > nums.count / 2 {
                
                return i
            }
            
            
        }

        return 0

    }

还有一种方法,因为出现次数大于数组长度的一半,所以排序后会在长度一半的地方重叠


func majorityElement(_ nums: [Int]) -> Int {
      //相当于是从小到大排序
        let temp =  nums.sorted()
  
        return temp[nums.count / 2]
    }

还有就是用字典记录次数 找出来出现次数大于数组长度一半的


func majorityElement(_ nums: [Int]) -> Int {
           var dict = [Int:Int]()
         if nums.count == 1 {
            return nums[0]
        }
        for num in nums {
            
            
            if dict.keys.contains(num) {
                
                dict[num]! += 1
                
                if dict[num]! > nums.count / 2 {
                    
                    return num
                }
                
            }
            else {
                dict[num] = 1
            }
            
            
            
            
        }

    
        return 0

    }






上一篇下一篇

猜你喜欢

热点阅读