zoukankan      html  css  js  c++  java
  • Leetcode 5331.跳跃游戏

    题目描述:

     

     题解:令dp[i]为从位置i开始所能访问的最大下标数。转移方程为dp[i] = max(dp[i],dp[j]+1),j为位置i可达点的下标。自底向上更新的dp,优先把位置低的点d更新出来即可。

    (一开始一直没有找到合适的有序遍历方法,其实排序一下就好了 )

    AC代码:

    int maxJumps(vector<int>& arr, int d) {
            int n = arr.size();
            vector<vector<int>> temp;
            vector<int> dp(n, 0);
            int res = 1;
            for (int i = 0; i < arr.size(); i++)
                temp.push_back({ arr[i],i });
            sort(temp.begin(), temp.end());
    
            for (int i = 0; i < n; i++) {
                int index = temp[i][1]; //编号;
                dp[index] = 1;
                //向左找
                for (int j = index - 1; j >= index - d && j >= 0; j--) {
                    if (arr[j] >= arr[index]) break;
                    if (dp[j] != 0) dp[index] = max(dp[index], dp[j ] + 1);
                }
                //向右找
                for (int j = index + 1; j <= index + d && j < n; j++) {
                    if (arr[j] >= arr[index]) break;
                    if (dp[j] != 0) dp[index] = max(dp[index], dp[j] + 1);
                }
                res = max(dp[index], res);
            }
            return res;
    
        }
  • 相关阅读:
    机器学习项目流程(二)探索并可视化数据
    机器学习项目流程(一)初探数据集
    数据类型.md
    keepalived.md
    LVS.md
    tomcat多实例.md
    LANMP常用配置.md
    php-fpm配置参数.md
    Nginx学习.md
    Redis.md
  • 原文地址:https://www.cnblogs.com/z1141000271/p/12252414.html
Copyright © 2011-2022 走看看