zoukankan      html  css  js  c++  java
  • Go语言实现:【剑指offer】数组中出现次数超过一半的数字

    该题目来源于牛客网《剑指offer》专题。

    数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。

    Go语言实现:
    方法一,排序取中间值判断:

    func moreThanHalfNum(nums []int) int {
      if nums == nil {
        return 0
      }
    ​
      sort.Ints(nums)
      //如果条件符合,结果一定是中间这个数
      middle := nums[len(nums)/2]
      
      //判断条件是否成立
      count := 0
      for _,num := range nums {
        if num == middle {
          count ++
        }
      }if count>len(nums)/2 {
        return middle
      } else {
        return 0
      }
    }
    

    方法二,遍历一遍记次数判断:

    func moreThanHalfNum(nums []int) int {
      if nums == nil {
        return 0
      }
    ​
      result := 0
      count := 0
      for index, num := range nums {
        if index == 0 {
          result = num
          count = 1
        } else {
          if result == num { //相等加一
            count ++
          } else { //不等减一
            count --
          }
          if count == 0 { //重新开始
            result = num
            count = 1
          }
        }
      }//判断条件是否成立
      count = 0
      for _, num := range nums {
        if num == result {
          count ++
        }
      }if count > len(nums)/2 {
        return result
      } else {
        return 0
      }
    }
    
  • 相关阅读:
    关于Python的super用法研究
    服务器提示缺少JAVA_HOME
    python_popen
    nslookup
    day2--深copy和浅copy
    if/while/fore根据编号购买商品
    标志位的用法
    python 循环和file操作实现用户密码输错三次将用户锁定
    day01项目:用户三次登陆锁定
    day01——python从认识开始
  • 原文地址:https://www.cnblogs.com/dubinyang/p/12099405.html
Copyright © 2011-2022 走看看