Go使用记忆化搜索的套路【以20240121力扣每日一题为例】

题目

在这里插入图片描述

分析

这道题很明显记忆化搜索,用py很容易写出来

Python

class Solution:def splitArray(self, nums: List[int], k: int) -> int:n = len(nums)# 寻找分割子数组中和的最小的最大值s = [0]for num in nums:s.append(s[-1] + num)#print(s)@cachedef dfs(cur, tk): # 前cur个分成tk个的最小的最大值if cur == tk: # 需要保证cur >= tkif cur == 0:return infreturn max(nums[:cur])if tk == 1:return sum(nums[:cur])if tk > cur:return infres = inf # 各自和的最大值的最小值for idx in range(tk - 1, cur):# idx到cur-1为最后一个子数组maxn = dfs(idx, tk - 1)if s[cur] - s[idx] > maxn:maxn = s[cur] - s[idx]if maxn < res:res = maxn#print(cur, tk, res)return resreturn dfs(n, k)

Go

func splitArray(nums []int, k int) int {n := len(nums)// 寻找分割子数组中和的最小的最大值s := make([]int, n+1)for i := 1; i <= n; i++ {s[i] = s[i-1] + nums[i-1]}//fmt.Println(s)// dfs外记忆化type args struct {cur, tk int}memo := map[args]int{} // dfs外记忆化var dfs func(int, int) intdfs = func(cur, tk int) int { // 前cur个分成tk个的最小的最大值if cur == tk { // 需要保证cur >= tkif cur == 0 {return 1<<31 - 1}return max(nums[:cur]...)}if tk == 1 {return sum(nums[:cur]...)}if tk > cur {return 1<<31 - 1}res := 1<<31 - 1 // 各自和的最大值的最小值// dfs内记忆化a := args{cur, tk}if v, ok := memo[a]; ok {return v}defer func() {memo[a] = res} ()// dfs内记忆化for idx := tk - 1; idx < cur; idx++ {// idx到cur-1为最后一个子数组maxn := dfs(idx, tk-1)if s[cur]-s[idx] > maxn {maxn = s[cur] - s[idx]}if maxn < res {res = maxn}}//fmt.Println(cur, tk, res)return res}return dfs(n, k)
}func max(nums ...int) int {res := nums[0]for _, num := range nums {if num > res {res = num}}return res
}func sum(nums ...int) int {res := 0for _, num := range nums {res += num}return res
}

总结

go需要在外层先定义一个struct结构体,然后用一个mp丢进去
在内层,再构建会struct,去判断map有没有,没有的话defer赋值

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/421522.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

140:leaflet加载here地图(v2软件多种形式)

第140个 点击查看专栏目录 本示例介绍如何在vue+leaflet中添加HERE地图(v2版本的软件),并且含多种的表现形式。包括地图类型,文字标记的设置、语言的选择、PPI的设定。 v3版本和v2版本有很大的区别,关键是引用方法上,请参考文章尾部的API链接。 直接复制下面的 vue+leaf…

chisel入门初步1——基4的booth编码的单周期有符号乘法器实现

基4的booth编码乘法器原理说明 基2的booth编码 本质来说就是一个裂项重组&#xff0c;乘法器最重要的设计是改变部分积的数量&#xff0c;另外在考虑有符号数的情况下&#xff0c;最高位符号位有特别的意义。 &#xff08;注&#xff1a;部分积是指需要最后一起加和的所有部分…

[足式机器人]Part2 Dr. CAN学习笔记- 最优控制Optimal Control Ch07-3 线性二次型调节器(LQR)

本文仅供学习使用 本文参考&#xff1a; B站&#xff1a;DR_CAN Dr. CAN学习笔记 - 最优控制Optimal Control Ch07-3 线性二次型调节器&#xff08;LQR&#xff09; 1. 数学推导2. 案例反洗与代码详解 1. 数学推导 2. 案例反洗与代码详解

深度了解六西格玛培训:用MINITAB软件优化数据处理和项目管理——张驰咨询

在追求卓越的道路上&#xff0c;六西格玛培训不仅是一种管理哲学&#xff0c;更是一套科学精细的工具箱。它起源于摩托罗拉的制造车间&#xff0c;但如今它的精粹已经应用到各个行业&#xff0c;无论规模大小&#xff0c;都在追求完美的产品和服务质量。 在张驰咨询&#xff0…

知识图谱的演进

目录 前言1 Memex&#xff1a;信息存储的雏形2 超文本和Web&#xff1a;链接的崛起3 Semantic Web&#xff1a;从文本链接到数据链接4 Linked Big Data&#xff1a;规范化的语义表示5 谷歌的知识图谱搜索引擎6 多种语义网/知识图谱项目结语 前言 随着人工智能和互联网的飞速发…

到店商详架构变迁

一、项目背景 到店商详是平台为京东到店业务提供的专属商详页面&#xff0c;将传统电商购物路径打造成以LBS门店属性的本地生活服务交易链路。 二、架构变迁 1、 主站商详扩展点 **优点&#xff1a;**到店侧仅关注业务&#xff0c;无需过度关注服务部署、性能优化等。 **缺…

一文学会Python中的while循环

Python 中的 while 循环是一种用于重复执行代码块的控制结构&#xff0c;它会根据条件的真假来决定是否继续执行循环。本文将深入探讨 Python 中的 while 循环&#xff0c;包括其基本语法、应用场景以及一些示例代码。 基本语法 在 Python 中&#xff0c;while 循环的基本语法…

持续集成工具Jenkins的使用之配置篇(二)

上一篇 &#xff1a;持续集成工具Jenkins的安装配置之安装篇(一)-CSDN博客 接上文 三.Jenkins配置 Jenkins配置主要是针对创建构建任务前做的一些基本配置&#xff0c;这些配置有些是必须的&#xff0c;有些是可以帮我们提高效率的&#xff0c;总之都是Jenkins管理员都要会的…

初识人工智能,一文读懂机器学习之逻辑回归知识文集(1)

文章目录 &#x1f3c6; 初识人工智能(机器学习之逻辑回归)&#x1f50e; 一、 机器学习之逻辑回归知识文集(1)&#x1f341; 01. 什么是逻辑回归&#xff1f;它与线性回归的区别是什么&#xff1f;&#x1f341; 02. 逻辑回归的应用场景有哪些&#xff1f;&#x1f341; 03. 逻…

【Web前端开发基础】CSS的盒子模型

CSS的盒子模型 一、学习目标 能够认识不同选择器的优先级公式能够进行CSS权重叠加计算&#xff0c;分析并解决CSS 冲突问题能够认识盒子模型的组成部分能够掌握盒子模型的边框、内边距、外边距的作用及简写形式能够计算盒子的实际大小能够了解外边距折叠现象&#xff0c;并知…

百果园上市一年股价腰斩,千亿营收“大饼”画不动了?

作为国内最大的水果零售商&#xff0c;深圳百果园实业&#xff08;集团&#xff09;股份有限公司&#xff08;下称“百果园”&#xff0c;02411.HK&#xff09;遭遇股价暴跌。 1月16日&#xff0c;百果园开盘后股价大幅跳水&#xff0c;盘中一度跌超34%&#xff0c;最低触及3.…

中国电子学会2022年12月份青少年软件编程Scratch图形化等级考试试卷一级真题(含答案)

一、单选题(共25题&#xff0c;共50分) 1. 小明想在开始表演之前向大家问好并做自我介绍&#xff0c;应运行下列哪个程序&#xff1f;(2分) A. B. C. D. 2. 舞台有两个不同的背景&#xff0c;小猫角色的哪个积木能够切换舞台背景&#xff1f;(2分) A. B. C. D. 3. …