2024-05-08:用go语言,给定一个由正整数组成的数组 nums, 找出数组中频率最高的元素, 然后计算该元素在数组中出现的总次数。 输入:nums = [1,2,2,3,1,4]。 输出:4。

2024-05-08:用go语言,给定一个由正整数组成的数组 nums,

找出数组中频率最高的元素,

然后计算该元素在数组中出现的总次数。

输入:nums = [1,2,2,3,1,4]。

输出:4。

答案2024-05-08:

chatgpt

题目来自leetcode3005。

大体步骤如下:

1.创建一个空的字典 cnt 用于存储每个元素的出现次数。

2.初始化 maxCntans 为 0,分别表示当前最大的出现次数和频率最高的元素在数组中的总次数。

3.遍历数组 nums 中的每个元素 x

  • 将元素 x 添加到字典 cnt 中,并将其对应的值加一表示出现次数增加。

  • 获取元素 x 的出现次数 c

  • 如果 c 大于 maxCnt,更新 maxCntans 为当前的出现次数 c

  • 如果 c 等于 maxCnt,将当前的出现次数 c 加到 ans 中。

4.返回变量 ans

总的时间复杂度:O(n),其中 n 是数组 nums 的长度,因为需要遍历整个数组。

总的额外空间复杂度:O(k),其中 k 是数组 nums 中不同元素的个数,因为需要使用字典 cnt 来存储元素的出现次数。

Go完整代码如下:

package main

import "fmt"

func maxFrequencyElements(nums []int) (ans int) {
	maxCnt := 0
	cnt := map[int]int{}
	for _, x := range nums {
		cnt[x]++
		c := cnt[x]
		if c > maxCnt {
			maxCnt = c
			ans = c
		} else if c == maxCnt {
			ans += c
		}
	}
	return
}

func main() {
	nums := []int{1, 2, 2, 3, 1, 4}
	ans := maxFrequencyElements(nums)
	fmt.Println(ans)
}

在这里插入图片描述

Python完整代码如下:

# -*-coding:utf-8-*-

def max_frequency_elements(nums):
    max_cnt = 0
    cnt = {}
    ans = 0
    for x in nums:
        cnt[x] = cnt.get(x, 0) + 1
        c = cnt[x]
        if c > max_cnt:
            max_cnt = c
            ans = c
        elif c == max_cnt:
            ans += c
    return ans

nums = [1, 2, 2, 3, 1, 4]
ans = max_frequency_elements(nums)
print(ans)

在这里插入图片描述

posted @ 2024-05-08 14:11  福大大架构师每日一题  阅读(6)  评论(0编辑  收藏  举报