当前位置: 首页 > news >正文

子数组|状态机dp

 

 

lc576

状态机dp

class Solution {
public:
    int findPaths(int m, int n, int N, int i, int j) {
       int MOD = 1000000007;
    if (N == 0) { return 0; }

    vector<vector<vector<unsigned long long int>>> dp(m + 2, vector<vector<unsigned long long int>>(n + 2, vector<unsigned long long int>(N + 1, 0)));
    for (int i = 0; i <= m + 1; i++) {
        dp[i][0][0] = 1;
        dp[i][n + 1][0] = 1;
    }
    for (int i = 0; i <= n + 1; i++) {
        dp[0][i][0] = 1;
        dp[m + 1][i][0] = 1;
    }
    for (int k = 1; k <= N; k++) {
        for (int i = 1; i <= m; i++) {
            for (int j = 1; j <= n; j++) {
                dp[i][j][k] = (dp[i - 1][j][k - 1] + dp[i + 1][j][k - 1] + \
                                dp[i][j - 1][k - 1] + dp[i][j + 1][k - 1]) % MOD;
            }
        }
    }
    int sum = 0;
    for (int k = 1; k <= N; k++) {
        sum = (sum + dp[i + 1][j + 1][k]) % MOD;
    }
    return sum;
    }
};

 

lc754

不断累加正整数,找到最小的n

使得累加和大于等于目标数且与目标数的差为偶数

此时n就是最小移动次数

 class Solution {

public:

    int reachNumber(int target) {

        target = abs(target); // 利用对称性,只考虑正数情况

        int n = 0;

        int sum = 0;

        while (sum < target || (sum - target) % 2 != 0) {

            n++;

            sum += n;

        }

        return n;

    }

};

 

lc9

同向双指针

class Solution {
public:
    int numSubarrayProductLessThanK(vector<int> &nums, int k) {
        if (k <= 1)
            return 0;
        int n = nums.size(), ans = 0, prod = 1, left = 0;
        for (int right = 0; right < n; ++right) {
            prod *= nums[right];
            while (prod >= k) // 不满足要求
                prod /= nums[left++];

            ans += right - left + 1;
        }
        return ans;
    }
};
 

 

lcr10

前缀和hash

class Solution {

public:

    int subarraySum(vector<int>& nums, int k)

{

        unordered_map<int, int> preSumFreq;

        preSumFreq[0] = 1;

        int preSum = 0;

        int cnt = 0;

        for (int num : nums) {

            preSum += num;

            if (preSumFreq.count(preSum - k)) 

                cnt += preSumFreq[preSum - k];

           preSumFreq[preSum]++;

        }

        return cnt;

    }

};

 

http://www.dtcms.com/a/589973.html

相关文章:

  • 家居网站建设如何自己公司网站维护
  • Spring Boot 3+Spring AI 打造旅游智能体!集成阿里云通义千问,多轮对话 + 搜索 + PDF 生成撑全流程
  • 西安网站设计制作一般多少钱新媒体营销的发展趋势
  • 手机T0智能算法交易个人开通指南
  • 卢沟桥网站建设互联网舆情报告
  • 4.2 Boost 库工具类 ignore_unused 的使用
  • 智能驾驶域控(ADCU)方案介绍
  • 关于我们的python日记本
  • 电子商城网站开发购物车网站联盟怎么做
  • 10、webgl 基本概念 + 坐标系统 + 立方体
  • 网站建设 类东莞网站建设方案外包
  • 小孩子和大人做的网站公司网站域名com好还是cn好
  • PostgreSQL 分区表实战:亿级订单表按时间拆分,查询提速 100 倍
  • 数字孪生如何落地
  • 4.1.8【2014统考真题】
  • 查询域名网站淮安淮阴网站建设
  • 智慧校园综合管理平台源码
  • 用Python识别图片中的文字(Tesseract OCR)
  • nvidia驱动安装(openEuler上安装T4驱动)
  • 网站开发 自学网上商城系统
  • 网站设计公司 中山搜狐三季度营收多少
  • 编程范式综论:从思维哲学到程序形态简论
  • 将C++对象暴露给QML两种的方法:注册为QML类型和设置为根上下文属性
  • SlaugFL论文阅读学习
  • 网站开发毕设ppt网站设计一般要求
  • PHP JSON 操作详解
  • 计算机操作系统:Shell 命令语言
  • layui表格数据居右
  • 建设银行的官方网站积分商场创业型企业网站模板
  • 怎么查看网站虚拟空间搭建网站需要哪些步骤