Leetcode-每日一题【剑指 Offer 14- II. 剪绳子 II】

news2024/11/16 15:35:57

题目

2、3、3的三段,此时得到的最大乘积是18。

答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。

示例 1:

输入: 2
输出: 1
解释: 2 = 1 + 1, 1 × 1 = 1

示例 2:

输入: 10
输出: 36
解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36

提示:

  • 2 <= n <= 1000

解题思路

1.题目要求我们将绳子剪切为乘积最大的 m 段,这个题的解题思路与剑指 Offer 14- I. 剪绳子基本相同,大家可以先去学习一下。唯一有一点不同的是,这道题需要我们取模。

2.那在这里我们只讲解一下大数取余的方法,

余数定理(推导过程略):

(ab)%p =((a%p)(b%p))%p

在每次乘法运算后都加上求余操作,则最终的结果就是想要求得的余数(在代码中体现在 pow 函数的for()循环中 res = (res * a) % p;就是在每次乘法运算后都加上求余操作)

因此: 循环求余法 = 循环求幂次+每次乘法运算后求余数 。所以,大数求余的本质实际就是通过“求幂次的方法+余数定理”,将原本要一次完成的操作,分解到了求幂次过程的每一次循环中,每次乘法操作都求一次余数。

3.因为在计算过程中res有可能超出类型,所以我们将res设置为 long 类型。那在cuttingRope() 函数的返回值中,我们就要将pow返回的 long 类型强转为 int 类型,但是在 mod ==1 和 mod == 2 时,有可能 pow 的返回值乘以 4 或者乘以 2 后依旧为 long 类型,所以我们要将相乘后的值再次取余后再进行强转。

代码实现

class Solution {
    public int cuttingRope(int n) {
         if(n <= 2){
            return 1;
        }
        if(n == 3){
            return 2;
        }
        int res = n / 3;
        int mod = n % 3;
        int p = 1000000007;
        if(mod == 0){
            return (int)pow(3,res);
        }else if(mod == 1){
            return (int)(pow(3,res - 1) * 4 % p);
        }else {
            return (int)(pow(3,res) * 2 % 1000000007);
        }

    }
    long pow(int a, int k){
        long res = 1;
        int p = 1000000007;
        for(int i = 1; i <= k; i++){
            res = (res * a) % p;
        }
        return res;
    }
}

测试结果

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/853293.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

19. python从入门到精通——Web编程

HTTP协议 HTTP协议的常用方法 方法 描述 GET 请求指定的页面信息&#xff0c;并返回实体主体。 POST 向指定资源提交数据进行处理请求&#xff08;例如提交表单或者上传文件&#xff09;。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 …

vue3中用watch监听响应式数据的注意点

如果你在vue3中使用reactive()方法创建响应式数据&#xff0c;然后又用torefs()方法将响应式数据解构成单一的ref响应式数据。 此时&#xff0c;如果你想用watch监听解构出来单一的响应式数据&#xff0c;watch不起作用。 此时&#xff0c;你需要用watch监听之前的reactive()…

Mybatis-Plus使用updateById()、update()将字段更新为null

文章目录 一、问题背景二、问题原因三、解决方案1. 设置全局的field-strategy2. 对某个字段设置单独的field-strategy3. 使用UpdateWrapper方式更新&#xff08;推荐使用&#xff09; 本文主要介绍了Mybatis-Plus使用updateById()、update()将字段更新为null&#xff0c;文中通…

一个好的人力资源管理系统包括哪些部分

阅读本文&#xff0c;您将具体详细了解&#xff1a;一个好的人力资源管理系统应该包括哪些部分。 人事部门是一家公司重要的职能部门之一&#xff0c;为公司的持续性、健康性发展提供人力保障。 然而&#xff0c;目前传统的人事管理方式在应对一些问题时存在着一些挑战。 例…

谈谈什么是云计算?以及它的应用

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 作者会持续更新网络知识和python基础知识&#xff0c;期待你的关注 目录 ​编辑 一、什么是云计算 二、云计算的优势与劣势&#xff1f; 1、云计算的优势 ①提高资源利用率 ②提升效率 ③降低成本 2、云…

RESTful互联网软件架构

文章目录 前言项目案例添加数据 PostMapping删除数据 DeleteMapping修改数据 PutMapping查询所有数据 GetMapping按照ID查询数据 GetMapping("/{xxx}")复杂多条件查询 PostMapping("/xxx") 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#x…

把握客户之心:专业供应商如何妥善应对不合理的项目要求

理解不合理要求的来源 在项目管理中&#xff0c;面对客户的不合理要求是一项经常遇到的挑战。但在对这些要求作出反应之前&#xff0c;我们首先需要深入了解它们的来源。 客户的业务环境与压力 对于许多客户来说&#xff0c;他们在提出项目需求时可能面临来自上级、同事或业…

无线液位传感器—简介

近年来&#xff0c;随着无线传感网络技术的愈发成熟和稳定&#xff0c;无线传感器因其安装、维护方便&#xff0c;不用布线、节约成本&#xff0c;监测方便&#xff0c;使用灵活&#xff0c;可适用于多种工业领域等优点&#xff0c;正在逐步替代部分传统有线传感器&#xff0c;…

JAVA电商平台免费搭建 B2B2C商城系统 多用户商城系统 直播带货 新零售商城 o2o商城 电子商务 拼团商城 分销商城 bbc

​ 1. 涉及平台 平台管理、商家端&#xff08;PC端、手机端&#xff09;、买家平台&#xff08;H5/公众号、小程序、APP端&#xff08;IOS/Android&#xff09;、微服务平台&#xff08;业务服务&#xff09; 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis 3. 前…

纯跟踪(Pure Pursuit)路径跟踪算法研究(2)

纯跟踪(Pure Pursuit)路径跟踪算法研究&#xff08;2&#xff09; 下午进行了简单的公式推导&#xff0c;理论推导部分是没有问题的 下面的博客提供了在实车上用 GPS 实现纯跟踪控制的一些思路和注意点 Pure Pursuit&#xff08;纯追踪算法&#xff09;ROS实践 并不急于在实车…

勘探开发人工智能技术:机器学习(1)

0 提纲 2.1 什么是机器学习 2.2 不确定性 2.3 数据类型 2.4 分类、回归、聚类 2.5 分类问题的训练与测试 2.6 性能评价指标 1 什么是机器学习 对于西瓜这个抽象类来说&#xff0c;它具有“色泽”&#xff0c;“根蒂”&#xff0c;“敲声”三个属性&#xff1a; 通过观察这个…

值得尝试的进销存软件,新手使用也轻松!

作为一名小老板&#xff0c;我曾经非常担心在操作进销存软件时出现故障&#xff0c;因为这会直接影响到我们的业务开展。然而&#xff0c;在操作管家婆云辉煌的过程中&#xff0c;我发现这种担忧是没有必要的。 管家婆云辉煌的稳定性非常高&#xff0c;几乎不会出现软件故障。 …

软件测试目的和原则

一、软件测试的目的 1&#xff09;软件测试是为了发现错误而执行程序的过程。 2&#xff09;测试是为了证明程序有错&#xff0c;而不是证明程序无错。&#xff08;发现错误不是唯一目的&#xff09; 3&#xff09;一个好的测试用例在于它发现至今未发现的错误。 4&#xf…

uni-app微信小程序开发自定义select下拉多选内容篇

分享-2023年高级前端进阶&#xff1a;前端登顶之巅-最全面的前端知识点总结站点 *分享一个使用比较久的&#x1fa9c; 技术框架公司的选型&#xff1a;uni-app uni-ui vue3 vite4 ts 需求分析&#xff1a;微信小程序-uni-ui内容 1、创建一个自定义的下拉&#xff0c;支持多…

浏览器多管闲事之跨域

年少时的梦想就是买一台小霸王游戏机 当时的宣传语就是小霸王其乐无穷~。 大些了&#xff0c;攒够了零花钱&#xff0c;在家长的带领下终于买到了 那一刻我感觉就是最幸福的人 风都是甜的&#xff01; 哪成想... 刚到家就被家长扣下了 “”禁止未成年人玩游戏机 (问过卖家了&a…

AWS中Lambda集成SNS

1.创建Lambda 在Lambda中&#xff0c;创建名为AWSSNSDemo的函数 use strict console.log(loading function); var aws require(aws-sdk); var docClient new aws.DynamoDB.DocumentClient(); aws.config.regionap-southeast-1;exports.handler function(event,context,cal…

C语言实现选择排序

什么是选择排序&#xff1f; 选择排序是一种简单直观的排序算法&#xff0c;它的核心思想是每次从未排序的元素中选择最小&#xff08;或最大&#xff09;的元素&#xff0c;然后将其放到已排序序列的末尾。通过重复这个过程&#xff0c;直到所有元素都排好序为止。 选择排序…

IntelliJ IDEA如何重新弹出git身份验证窗口

1、点击File菜单—>点击Settings—>点击Appearance & Behavior—>点击System Settings—>点击Passwords—>选中Do not save, forget passwords after restart—>点击Apply—>点击OK&#xff0c;如下所示&#xff1a; 2、重启IntelliJ IDEA—>通过g…

idea集成svn

一、注意 安装svn客户端的时候一定要勾选&#xff0c;否则在idea上集成svn的时候会找不到 svn.exe 而报错。 如果当初安装时忘记勾选&#xff0c;重新运行安装包&#xff0c;选择modify&#xff0c;勾选command line client tools项中的内容。 二、配置idea集成svn 三、检出(c…

生产车间SOP+电子作业指导书系统解决方案

为了提高生产效率&#xff0c;许多企业开始使用SOP电子作业指导书系统来统一管理和快速发布工作指导书。这种系统不仅能够实现无纸化办公&#xff0c;节省企业资源&#xff0c;还能集成生产管理看板系统和安灯呼叫系统&#xff0c;实现生产现场数据的目视化管理。 一、SOP系统拓…