建设银行北京分行网站,wordpress回复邮件提醒,建筑工程劳务信息平台,wordpress portfolio 缩略图1.买卖股票的最佳时间② 思路#xff1a;构建每两天之间的利润之差#xff0c;如果是正数则一直累加即可。 体现出来场景是#xff0c;如果理论一直为正#xff0c;则说明我们需要一直持有股票。当出现负数时#xff0c;代表我们应该在前一天卖出。当出现正数时我们应该在…1.买卖股票的最佳时间② 思路构建每两天之间的利润之差如果是正数则一直累加即可。 体现出来场景是如果理论一直为正则说明我们需要一直持有股票。当出现负数时代表我们应该在前一天卖出。当出现正数时我们应该在前一天买入。
func maxProfit(prices []int) int {profits : make([]int,len(prices)-1)//生成profits数组for i:1;ilen(prices);i{profits[i-1] prices[i]-prices[i-1]} sum : 0for i:0;ilen(profits);i{if profits[i]0{sum profits[i]}}return sum
}2.跳跃游戏 2.1 反向遍历自己写
特殊条件
数组只有一个元素永远为true数组第一个元素为0且长度不为1永远为false数组最后一个元素为0
我是思路是从后往前遍历当有零时向前查看有能够跳过该0的数。
func canJump(nums []int) bool {if len(nums)1{return true}if nums[0]0{return false}flag : truefor i: len(nums)-1;i0;{if nums[i]0{flag falsetemp : 1if ilen(nums)-1{temp 0}i--for i0{if nums[i]temp{flag truebreak}else{tempi--}}}else{i--continue}if !flag{return false}}return true
}2.2 正向遍历官方
// 贪心
func canJump(nums []int) bool {cover : 0//目前所能覆盖到的最远地方n : len(nums)-1for i:0;icover;i{//每次与覆盖值相比较cover max(inums[i],cover//每走一步都将 cover 更新为最大值)if cover n{return true}}return false
}
func max(a, b int ) int {if a b {return a}return b
}3.跳跃游戏② 使用jumpCount来记录到达每个位置的最小步数。
3.1 方法1自己写的
感觉用了动态规划
func jump(nums []int) int {n : len(nums)jumpCount : make([]int, n)for i : 0; i n; i {for j : 1; j nums[i] ij n; j {if jumpCount[ij] 0 {jumpCount[ij] jumpCount[i] 1} else {jumpCount[ij] min(jumpCount[ij], jumpCount[i]1)}if ij n-1 {return jumpCount[n-1]}}}return jumpCount[n-1]
}2.2 官方方法
// 贪心版本一
func jump(nums []int) int {n : len(nums)if n1{return 0}cur,next : 0,0step : 0for i : 0;in;i{next max(nums[i]i, next)if i cur{//只有当走到目前能走的最远处才考虑进行走下一步if cur ! n-1{//还没到达终点stepcur nextif curn-1{//已经可以到达终点return step}}else{return step}}}return step
}func max(a, b int) int {if a b {return a}return b
}4.K次取反后最大化的数组和 解题思路尽可能的先将最小负数进行反转若全部翻转后还有次数剩余。若为偶数则无所谓。若为奇数则将一个最小数进行反转
func largestSumAfterKNegations(nums []int, k int) int {sort.Slice(nums, func(i, j int) bool {return math.Abs(float64(nums[i])) math.Abs(float64(nums[j]))})sum : 0for i : 0; i len(nums); i {if nums[i] 0 k 0 {sum -nums[i]k--} else {sum nums[i]}}if k%2 0 {return sum} else {if nums[len(nums)-1] 0 {return sum 2*nums[len(nums)-1]*-1} else {return sum 2*nums[len(nums)-1]}}
}