1299. 将每个元素替换为右侧最大元素
动态规划
1 是从左往右,可以转换一下思维从右往左,这样比较次数不就是下降很大吗?
2这个题的重点就是转移方程 dp[i]=max(dp[i+1],arr[i]) 表示的就是后面的最大值和当前元素最大值哪个大 就是当前索引的最大值
package main
import "fmt"
func max(a,b int)int{
if a>b{
return a
}
return b
}
func replaceElements(arr []int) []int {
if len(arr)==0{
return arr
}
dp:=make([]int,len(arr)+1)
dp[len(dp)-1]=-1
for i:=len(arr)-1;i>0;i--{
dp[i]=max(dp[i+1],arr[i])
}
return dp[1:]
}
func main() {
fmt.Println(replaceElements([]int{400}))
fmt.Println(replaceElements([]int{17,18,5,4,6,1}))
}
或者这样
func replaceElements(arr []int) []int {
if len(arr)==0{
return arr
}
dp:=make([]int,len(arr))
dp[len(arr)-1]=-1
for i:=len(arr)-2;i>=0;i--{
dp[i]=max(dp[i+1],arr[i+1])
}
return dp
}