首页 > 其他分享 >【每日一题】3266. K 次乘运算后的最终数组 I&II

【每日一题】3266. K 次乘运算后的最终数组 I&II

时间:2024-12-14 21:31:29浏览次数:11  
标签:nums int 3266 II 数组 multiplier mx MOD

给你一个整数数组 nums ,一个整数 k  和一个整数 multiplier 。

你需要对 nums 执行 k 次操作,每次操作中:

  • 找到 nums 中的 最小 值 x ,如果存在多个最小值,选择最 前面 的一个。
  • 将 x 替换为 x * multiplier 。

k 次操作以后,你需要将 nums 中每一个数值对 109 + 7 取余。

请你返回执行完 k 次乘运算以及取余运算之后,最终的 nums 数组。

 

 

class Solution:
    def getFinalState(self, nums: List[int], k: int, multiplier: int) -> List[int]:
        if multiplier == 1:  # 数组不变
            return nums

        MOD = 1_000_000_007
        n = len(nums)
        mx = max(nums)
        h = [(x, i) for i, x in enumerate(nums)]
        heapify(h)

        # 模拟,直到堆顶是 mx
        while k and h[0][0] < mx:
            x, i = h[0]
            heapreplace(h, (x * multiplier, i))
            k -= 1

        # 剩余的操作可以直接用公式计算
        h.sort()
        for i, (x, j) in enumerate(h):
            nums[j] = x * pow(multiplier, k // n + (i < k % n), MOD) % MOD
        return nums

 

标签:nums,int,3266,II,数组,multiplier,mx,MOD
From: https://www.cnblogs.com/xxlm/p/18607219

相关文章

  • 力扣 3266. K 次乘运算后的最终数组 II
    发现\(k\le10^9\),肯定不能直接模拟了。但是注意到,如果最小值\(\min\timesm>\max\)存在,我们可以直接给每个数乘上\(m^{\lfloor\frac{k}{n}\rfloor}\),最后再处理剩下的\(k\bmodn\)个\(m\)即可,这个复杂度是\(O(n)\)的。具体地说,最小值乘上一个\(m\)超过最大值之后,其......
  • 新手学习C语言打卡8(数组)
    数组:数组:是一种容器,可以用来存储同种类数据类型的多个值数组的本质是地址数组的定义:数据类型数组名[长度]eg:intarr=[3];                   特点1.连续的空间特点2.一旦定义,长度不可变数组的初始化:数据类型数组名[长度]={数据值,数据值...}......
  • 牛客:请在给定的数组中查找一个特定的数字,如果该数字出现多次,请输出第一次出现的位置。
    链接:登录—专业IT笔试面试备考平台_牛客网来源:牛客网 题目描述请在给定的数组中查找一个特定的数字,如果该数字出现多次,请输出第一次出现的位置。输入描述:多组测试,每组第一行输入1个整数n(n<20)第二行输入n个整数第三行输入1个整数m输出描述:查找在第二行的n个整数......
  • gofiber: 请求参数是数组的处理
    一,js处理数组的形式:js的处理:varaddIdList=[];for(i=0;i<content.length;i++){if(content[i].checked){addIdList.push(content[i].value);}}console.log("选中的id:");......
  • 前端数组api
    一、增删改方法1、在数组最后面添加一个元素push()方法用于在数组的末尾添加一个或多个元素letfruits=['apple','banana','orange']fruits.push('grape');//输出:['apple','banana','orange','grape']2、删除数组最后一个元素pop()方法......
  • java学习,数组排序
    Java数组进行排序,可以使用多种方法。常用的方法,包括使用内置的Arrays.sort() 方法和手动实现一些基本排序算法。Arrays.sort()方法Java提供了内置的Arrays.sort()方法,可以非常方便地对数组进行排序importjava.util.Arrays; publicclassArraySortExample{ ......
  • Java学习,数组元素查找
    Java查找数组元素,通常涉及遍历数组并比较每个元素与目标值。基本方法,包括线性搜索和二分搜索。线性搜索线性搜索是最简单的搜索算法,逐个检查数组中每个元素,直到找到目标值或遍历完整个数组publicclassLinearSearchExample{  publicstaticvoidmain(String[]args)......
  • 说说你对稀疏数组的理解
    稀疏数组(SparseArray)在计算机科学中,尤其是在数据结构和算法领域,是一种用于优化存储和访问大规模数据的技术,特别是当这些数据包含大量重复值或默认值时。尽管稀疏数组的概念并不局限于前端开发,但理解其在数据表示和传输方面的优势对于前端开发同样重要。以下是对稀疏数组的一些理......
  • 为什么js里定义的数组可以不定长且数据类型可以不固定呢?
    JavaScript数组之所以可以不定长且数据类型不固定,是因为它底层实现的机制与传统静态类型语言(如C++或Java)中的数组不同。JavaScript数组本质上是对象,而不是像其他语言那样是连续内存空间的固定大小的结构。具体来说:不定长:JavaScript数组并没有预先分配固定的内存空间......
  • js最大支持多少长度的数组?为什么?
    JavaScript数组的长度理论上受限于JavaScript引擎能够分配的内存大小。并没有一个固定的最大长度限制,它取决于运行JavaScript代码的系统(操作系统、浏览器、Node.js环境等)的可用内存。为什么没有固定限制?JavaScript数组是动态数组,这意味着它们可以根据需要增长或缩小。......