1299. 将每个元素替换为右侧最大元素

image.png

动态规划

1 是从左往右,可以转换一下思维从右往左,这样比较次数不就是下降很大吗?
2这个题的重点就是转移方程 dp[i]=max(dp[i+1],arr[i]) 表示的就是后面的最大值和当前元素最大值哪个大 就是当前索引的最大值

  1. package main
  2. import "fmt"
  3. func max(a,b int)int{
  4. if a>b{
  5. return a
  6. }
  7. return b
  8. }
  9. func replaceElements(arr []int) []int {
  10. if len(arr)==0{
  11. return arr
  12. }
  13. dp:=make([]int,len(arr)+1)
  14. dp[len(dp)-1]=-1
  15. for i:=len(arr)-1;i>0;i--{
  16. dp[i]=max(dp[i+1],arr[i])
  17. }
  18. return dp[1:]
  19. }
  20. func main() {
  21. fmt.Println(replaceElements([]int{400}))
  22. fmt.Println(replaceElements([]int{17,18,5,4,6,1}))
  23. }

image.png
或者这样

  1. func replaceElements(arr []int) []int {
  2. if len(arr)==0{
  3. return arr
  4. }
  5. dp:=make([]int,len(arr))
  6. dp[len(arr)-1]=-1
  7. for i:=len(arr)-2;i>=0;i--{
  8. dp[i]=max(dp[i+1],arr[i+1])
  9. }
  10. return dp
  11. }