仓颉刷题录-二维数组(二)
文章目录
- 前言
- 题目
- 吐槽环节
前言
经过上次的首刷,今天再来刷一道题!
这是双子专栏:Cangjie仓颉程序设计-个人总结
本专栏还在持续更新:仓颉编程cangjie刷题录
题目
题目链接
经典的dp题,解法可以去看题解,我这主要说一下写语法的经历
来自未来的体育科学家给你两个整数数组 energyDrinkA 和 energyDrinkB,数组长度都等于 n。这两个数组分别代表 A、B 两种不同能量饮料每小时所能提供的强化能量。
你需要每小时饮用一种能量饮料来 最大化 你的总强化能量。然而,如果从一种能量饮料切换到另一种,你需要等待一小时来梳理身体的能量体系(在那个小时里你将不会获得任何强化能量)。
返回在接下来的 n 小时内你能获得的 最大 总强化能量。
注意 你可以选择从饮用任意一种能量饮料开始。
import std.math.*
class Solution {func maxEnergyBoost(energyDrinkA: Array<Int64>, energyDrinkB: Array<Int64>): Int64 {var n = energyDrinkA.sizevar f = Array<Array<Int>> (n + 1) {i => [0, 0]}f[1][0] = energyDrinkA[0]f[1][1] = energyDrinkB[0]for (i in 2..f.size) {f[i][0] = energyDrinkA[i - 1] + max(f[i - 1][0], f[i-2][1])f[i][1] = energyDrinkB[i - 1] + max(f[i - 1][1], f[i - 2][0])}return max(f[n][0], f[n][1])}
}
吐槽环节
max
第一口槽送给max函数,max函数不是在默认导入的包里的。
import std.core.* // 默认自动导入
然而这个新出的语言我没搜到怎么调max。就自己先手撸了一个。但是max这么简单的函数如果不知道怎么掉包,自己写一个函数也很简单,但是我主要是想看看这个语言怎么写算法,我总不能每次都自己手撸一个max吧?
本来我以为就像c++、python这样的,直接就能用。但是忘了试试java的套路,后来去math包里一看,还真有!
import std.math.*
二维数组
咱就是说谁会用引用初始化多维数组?数组里面每个元素都是一个对象的引用,很好玩吗?一看这道题的返回格式就懵了,二维数组,好家伙,二维数组怎么建?没搜到。
所以自己仿照一维数组建了个二维数组,建起来了
var data = Array<Array<Int>>(n, item: [0, 0])
上面这句代码怎么看都没问题吧。但是当我把题写完看结果的时候,怎么回事?
改了一个元素,结果全都变了。
我真是服了,这初始化也是没谁了。
咱就继续换一换其他的方式试一下,哎,成了!
var data = Array<Array<Int>>(n) {_ => [0, 0]}
这样就好了