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
      }
    }
    
  • 相关阅读:
    上传文件,经过Zuul,中文文件名乱码解决办法
    Spring Cloud Sleuth进阶实战
    如何在IDEA启动多个Spring Boot工程实例
    深入理解Zuul之源码解析
    深入理解Hystrix之文档翻译
    Spring 之BeanFactory(转)
    spring之BeanFactoryAware接口
    ExecutorService线程池
    POJO
    newInstance 与new的区别
  • 原文地址:https://www.cnblogs.com/dubinyang/p/12099405.html
Copyright © 2011-2022 走看看