题解 | 数组中出现次数超过一半的数字

数组中出现次数超过一半的数字

https://www.nowcoder.com/practice/e8a1b01a2df14cb2b228b30ee6a92163

package main

import (
// "sort"
)

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 *
 * @param numbers int整型一维数组
 * @return int整型
 */
func MoreThanHalfNum_Solution(numbers []int) int {
	// write code here
	// sort.Ints(numbers) // 升序

	// sort.Slice(numbers, func(i, j int) bool{
	//     return numbers[i] > numbers[j] // 降序
	// })

	// numbers = QiuckSort(numbers)
	// len := len(numbers)
	// return numbers[(len) / 2]

	// return Hash(numbers)

	// 投票法
	return Vote(numbers)
}

func Vote(numbers []int) int {
	count := 1
	res := numbers[0]

	for _, val := range numbers[1:] {
		if val == res {
			count++
		} else {
			count--
		}
		if count == 0 {
			count = 1
			res = val
		}
	}

	return res
}

func Hash(numbers []int) int {
	hash := make(map[int]int)
	for _, val := range numbers {
		hash[val]++
	}

	maxKey := 0
	maxVal := 0

	for key, val := range hash {
		if val >= maxVal {
			maxKey = key
			maxVal = val
		}
	}

	return maxKey
}

func QiuckSort(numbers []int) []int {
	if len(numbers) <= 1 {
		return numbers
	}

	pre := numbers[0]
	var left, right []int
	for _, val := range numbers {
		if val < pre {
			left = append(left, val)
		} else {
			right = append(right, val)
		}
	}

	return append(append(left, pre), right...)
}

全部评论

相关推荐

在debug的柠檬精很迷人:好消息:现在HR挑三拣四 15年后 HR跪着求要简历 坏消息:被挑的是这代人,到时候求人的也是这代人。真好。
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
06-23 18:34
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务