GO-求数组最大数值次数

package main

import (
    "bufio"
    "fmt"
    "io"
    "os"
    "strconv"
    "strings"
)

// Complete the birthdayCakeCandles function below.
func birthdayCakeCandles(ar []int32) int32 {
    newMap := make(map[int32]int32)
    var maxVal int32= 0
    for _, value := range ar {
        if(maxVal<value){
            maxVal = value
        }
        if newMap[value] != 0 {
            newMap[value]++
        } else {
            newMap[value] = 1
        }
    }
    return newMap[maxVal]


}

func main() {
    reader := bufio.NewReaderSize(os.Stdin, 1024 * 1024)

    stdout, err := os.Create(os.Getenv("OUTPUT_PATH"))
    checkError(err)

    defer stdout.Close()

    writer := bufio.NewWriterSize(stdout, 1024 * 1024)

    arCount, err := strconv.ParseInt(readLine(reader), 10, 64)
    checkError(err)

    arTemp := strings.Split(readLine(reader), " ")

    var ar []int32

    for i := 0; i < int(arCount); i++ {
        arItemTemp, err := strconv.ParseInt(arTemp[i], 10, 64)
        checkError(err)
        arItem := int32(arItemTemp)
        ar = append(ar, arItem)
    }

    result := birthdayCakeCandles(ar)

    fmt.Fprintf(writer, "%d\n", result)

    writer.Flush()
}

func readLine(reader *bufio.Reader) string {
    str, _, err := reader.ReadLine()
    if err == io.EOF {
        return ""
    }

    return strings.TrimRight(string(str), "\r\n")
}

func checkError(err error) {
    if err != nil {
        panic(err)
    }
}

 

转载于:https://my.oschina.net/u/3666671/blog/3009888

贪心算法是一种在每一步选择中都做出当前最优选择的策略,期望通过一系列局部最优解达到全局最优解。你提到的问题是一个关于如何利用贪心思想最大化某种结果的经典应用。 ### 问题描述 假设我们有一个长度为 `n` 的数组 `A[]` 和另一个同样长度的操作数组 `B[]`,其中 `B[i]` 表示对 `A` 中第 `i` 位及其之后所有元素增加一次操作的机会。目标是在有限次操作内尽可能地增大最终的结果值——即计算加权和的最大化:\(\sum A[i]*F(i)\),这里 \(F(i)\) 表示位置 i 上实际累积了多少次增量。 ### 解决方案步骤分解: 1. **构建差分数组** 根据题目给定条件构造出反映每次操作影响范围的“差分”形式的变化量表示法(例如对于单点更新、区间增减等),方便快速统计各索引处累计发生的改变频率; 2. **获取每个位置的实际操作次数** 对上述生成好的差分序列做前缀和运算,获得原数组各个下标对应真正被覆盖到的有效修改频度; 3. **准备用于分配权重的据源** 将两部分据分别按非递增顺序排列:一是原始待处理的目标整型切片 `nums []int`; 另一个是前述所得体现重要性的指标集 `counts []int` 4. **实施贪心规则下的配对组合** 按照从大至小的原则同步遍历两个已排序列表,并逐项相乘再累加入总得分变量之中直至结束整个循环过程 5. 返回或打印最终得到的答案值 ```go func maxSum(nums []int, counts []int) int { // 假设 nums 和 counts 已经按照题意准备好 sort.Sort(sort.Reverse(sort.IntSlice(counts))) sort.Sort(sort.Reverse(sort.IntSlice(nums))) result := 0 for i := range nums { result += nums[i] * counts[i] } return result } ``` 此段伪代码展示了核心思路的具体编码实现方式。需要注意的是,在真实的场景里还需要考虑边界情况以及输入验证等问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值