2024-05-22:用go语言,你有一个包含 n 个整数的数组 nums。 每个数组的代价是指该数组中的第一个元素的值。 你的目标是将这个数组划分为三个连续且互不重叠的子数组。 然后,计算这三个子数

2024-05-22:用go语言,你有一个包含 n 个整数的数组 nums。

每个数组的代价是指该数组中的第一个元素的值。

你的目标是将这个数组划分为三个连续且互不重叠的子数组。

然后,计算这三个子数组的代价之和,

要求返回这个和的最小值。

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

输出:6。

答案2024-05-22:

chatgpt

题目来自leetcode3010。

大体步骤如下:

1.初始化操作:

  • main 函数开始,创建一个整型数组 nums,其中包含 [1, 2, 3, 12]

  • 定义并调用 minimumCost 函数来计算划分成三个子数组后的最小代价之和。

2.计算最小代价:

  • minimumCost 函数中,fise 被初始化为 math.MaxInt64,表示两个最大的整数值,确保任何元素都会比它们小。

  • 对于给定的数组 nums,迭代从第二个元素开始的所有元素:

    • 如果元素 x 小于当前最小值 fi,则将第二小值 se 更新为当前最小值 fi,并更新最小值为 x

    • 否则,如果元素 x介于当前最小值 fi 和第二小值 se 之间,则更新第二小值 sex

  • 返回结果为数组第一个元素 nums[0] 与找到的两个最小值 fise 的和。

3.解问题:

  • 对于输入数组 [1, 2, 3, 12],算法将找到两个最小值为 12

  • 算法返回结果为 1 + 1 + 2 = 4,此结果表示划分三个子数组后的最小代价之和。

4.时间复杂度:

  • 迭代一次数组,需要 O(n) 的时间复杂度,其中 n 是数组的长度。

5.空间复杂度:

  • 除了输入的数组外,算法只使用了常量级别的额外空间,因此空间复杂度为 O(1)

Go完整代码如下:

package main

import (
    "fmt"
    "math"
)

func minimumCost(nums []int) int {
    fi, se := math.MaxInt64, math.MaxInt64
    for _, x := range nums[1:] {
        if x < fi {
            se = fi
            fi = x
        } else if x < se {
            se = x
        }
    }
    return nums[0] + fi + se
}

func main() {
    nums := []int{1, 2, 3, 12}
    result := minimumCost(nums)
    fmt.Println(result)
}

在这里插入图片描述

Python完整代码如下:

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

import math

def minimum_cost(nums):
    fi, se = math.inf, math.inf
    for x in nums[1:]:
        if x < fi:
            se = fi
            fi = x
        elif x < se:
            se = x
    return nums[0] + fi + se

def main():
    nums = [1, 2, 3, 12]
    result = minimum_cost(nums)
    print(result)

if __name__ == "__main__":
    main()

在这里插入图片描述

posted @   福大大架构师每日一题  阅读(12)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
历史上的今天:
2023-05-22 文心一言 VS chatgpt (21)-- h264编码一帧数据的流程是怎样的?
2023-05-22 2023-05-22:给定一个长度为 n 的字符串 s ,其中 s[i] 是: D 意味着减少; I 意味着增加。 有效排列 是对有 n + 1 个在 [0, n] 范围内的整数的一个排列 perm
2022-05-22 2022-05-22:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p
2021-05-22 2021-05-22:假设所有字符都是小写字母, 大字符串是str,arr是去重的单词表, 每个单词都不是空字符串且可以使用任意次。使用arr中的单词有多少种拼接str的方式。 返回方法数。
点击右上角即可分享
微信分享提示