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

leetcode3250. 单调数组对的数目 I,仅需1s

题目:
https://leetcode.cn/problems/find-the-count-of-monotonic-pairs-i/description/
不为别的,只是记录下这个超过100%,而且比原先最快的快了一个量级
在这里插入图片描述在这里插入图片描述

不知道咋分析,反正得出结论就是,变大不变,变小跟着变,最后一个数,如果是负数,直接为0,如果为正数,就是C(len+n取n)
两个解题时间如图:
1、使用加法计算C

class Solution {
    public int countOfPairs(int[] nums) {
        int jj = 0;
        int len = nums.length;
        for (int i = 1; i < len; i++) {
            if (nums[i] - jj >= nums[i - 1]) {
                jj = nums[i] - nums[i - 1];
                nums[i] = nums[i - 1];
            } else {
                nums[i] -= jj;
                if (nums[i] < 0) {
                    return 0;
                }
            }
        }
        return getAns(nums.length, nums[len - 1]);
    }
	//使用加法计算
    private int getAns(int length, int num) {
        long[] anss = new long[num + 1];
        for (int i = 0; i < anss.length; i++) {
            anss[i] = 1;
        }
        for (int i = 0; i < length; i++) {
            for (int j = 1; j <= num; j++) {
                anss[j] += anss[j - 1];
                anss[j]%=1_000_000_007;
            }
        }
        return (int) anss[num];
    }
}

2、使用计算式计算C,因为存在1000_000_007,所以先约分

class Solution {
    public int countOfPairs(int[] nums) {
        int jj = 0;
        int len = nums.length;
        for (int i = 1; i < len; i++) {
            if (nums[i] - jj >= nums[i - 1]) {
                jj = nums[i] - nums[i - 1];
                nums[i] = nums[i - 1];
            } else {
                nums[i] -= jj;
                if (nums[i] < 0) {
                    return 0;
                }
            }
        }
        return getAns(nums.length, nums[len - 1]);
    }

    private int getAns(int length, int num) {
        if (length <= num) {
            return getAA(length, length + num);
        } else {
            return getAA(num, length + num);
        }
    }
	//以下计算C(length取n)
    private int getAA(int n, int length) {
        if (n == 0) {
            return 1;
        }
        int[] fenzi = new int[n];
        for (int i = 0; i < n; i++) {
            fenzi[i] = length - i;
        }
        for (int i = 1; i <= n; i++) {
            int temp = i;
            int j = 0;
            while (temp > 1) {
                int yue = getYue(temp, fenzi[j]);
                temp /= yue;
                fenzi[j] /= yue;
                j++;
            }
        }
        long ans = 1;
        for (int i : fenzi) {
            ans *= i;
            ans %= 1000_000_007;
        }
        return (int) ans;
    }

    private int getYue(int t1, int t2) {
        if (t1 == t2) {
            return t1;
        }
        if (t1 > t2) {
            return getYYY(t1, t2);
        } else {
            return getYYY(t2, t1);
        }
    }

    private int getYYY(int t1, int t2) {
        int t3 = t1 % t2;
        if (t3 == 0) {
            return t2;
        }
        return getYYY(t2, t3);
    }
}

http://www.kler.cn/a/418983.html

相关文章:

  • Nature Methods | 人工智能在生物与医学研究中的应用
  • 简单搭建qiankun的主应用和子应用并且用Docker进行服务器部署
  • Cesium中onTick事件监听器
  • 深度学习:梯度下降法
  • WPF 常用的5个布局容器控件介绍
  • 五:OpenStack环境准备-compute node
  • SQL基础入门—— SQL 数据类型
  • shell语法(1)bash
  • SAP SD学习笔记15 - 投诉处理2 - 返品处理流程之 参照请求传票(发票)来生成返品传票
  • JavaScript 入门教学:从基础语法到实践案例
  • Oracle 11g R2 RAC 到单实例 Data Guard 搭建(RMAN备份方式)
  • 小红书矩阵运营:怎么通过多个账号来提升品牌曝光?
  • 【Ubuntu系统开发工具使用技能】在jupyter notebook界面选择新的conda虚拟开发环境
  • 使用 Certbot 为 Nginx 自动配置 SSL 证书
  • kafka数据在服务端时怎么写入的
  • Hive 安装与架构详解
  • NVR监测软件EasyNVR多个NVR同时管理:录播主机的5条常见问题与解决办法
  • Maven-课堂笔记
  • 汾西矿业洗煤厂智能化升级-10kV配电室机器人巡检系统正式启用【刀闸视频联动】
  • Permute for Mac 媒体文件格式转换软件 安装教程【音视频图像文件转换,简单操作,轻松转换,提高效率】
  • 微信小程序用户登录页面制作教程
  • 序列式容器详细攻略(vector、list)C++
  • Nginx 负载均衡和反向代理
  • 二:OpenStack环境准备-controller node
  • Qt 窗口操作函数(置顶、全屏,最大化最小化按钮设置等)
  • Ubuntu 服务器部署 Tomcat 并配置 SSL/TLS 证书