task7-几种算法思想

归这一算法主要用于解决实际问题中反复出现的结构和形式,从本质层面对其加以概括,提高算法的高效性,如Fibonacci数

class Solution {
public:
    int climbStairs(int n) {
    if(n<=1)
        return 1;
    else
        return climbStairs(n-1)+climbStairs(n-2);
    }
};

N皇后问题:https://leetcode-cn.com/problems/n-queens/submissions/

逆序数

class Solution {
public:
    int kInversePairs(int n, int k) {
        int m = 1000000007;
    int dp[n + 1][k + 1];
    // 初始化, 所有的取0个逆序对的情况都只有一种
    for (int i = 0; i <= n; i++) {
        dp[i][0] = 1;
    }

    // 当有0个元素的时候,逆序对大于1的情况都是0
    for (int i = 1; i <= k; i++) {
        dp[0][i] = 0;
    }

    // 开始为计算所有的dp元素
    for (int row_n = 1; row_n <= n; row_n++) {
        for (int col_k = 1; col_k <= k; col_k++) {
            dp[row_n][col_k] = (dp[row_n - 1][col_k] + dp[row_n][col_k - 1]) % m;
            if (col_k >= row_n) {
                dp[row_n][col_k] = (dp[row_n][col_k] - dp[row_n - 1][col_k - row_n] + m) % m;
            }
        }
    }
    return dp[n][k];

    }
};

参考:https://myblog-1251766755.cos-website.ap-beijing.myqcloud.com/2018/08/07/leetcode/LeetCode:%20629.%C2%A0K%E4%B8%AA%E9%80%86%E5%BA%8F%E5%AF%B9%E6%95%B0%E7%BB%84/

 最小路径之和

class Solution {
public:
    int minPathSum(vector<vector<int>>& grid) {
        for(int i=1; i<grid.size(); i++) 
            grid[i][0] += grid[i-1][0];
        for(int j=1; j<grid[0].size(); j++) 
            grid[0][j] += grid[0][j-1];
        for (int i=1; i<grid.size(); i++) {
            for (int j=1; j<grid[0].size(); j++) {
                grid[i][j] = min(grid[i][j-1], grid[i-1][j]) + grid[i][j];
            }
        }
        return grid[grid.size()-1][grid[0].size()-1];
    }
};
 

10.正则表达式:https://leetcode-cn.com/problems/regular-expression-matching/submissions/

152.乘积最大子序列:https://leetcode-cn.com/problems/maximum-product-subarray/submissions/

121.买卖股票的最佳时机:

class Solution {
public:
    int maxProfit(vector<int>& prices) {
             int maxP=0;
        for(int i=0;i<prices.size();++i)
        {
            for(int j=i+1;j<prices.size();++j)
            {
                int profit=prices[j]-prices[i];
                if(maxP<profit)
                {
                    maxP=profit;
                }
            }
        }
   
    
        return maxP;
    }
};

 120.三角形的最小路径之和:https://leetcode-cn.com/problems/triangle/submissions/

猜你喜欢

转载自blog.csdn.net/weixin_43989326/article/details/88600697