首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    14—将数组和减半的最少操作次数【LeetCode2208】

    将数组和减半的最少操作次数 - 力扣(LeetCode) 给你一个正整数数组 nums 。每一次操作中,你可以从 nums 中选择 任意 一个数并将它减小到 恰好 一半。...(注意,在后续操作中你可以对减半过的数继续执行操作) 请你返回将 nums 数组和 至少 减少一半的 最少 操作数。...nums 的和减小了 33 - 14.75 = 18.25 ,减小的部分超过了初始数组和的一半,18.25 >= 33/2 = 16.5 。 我们需要 3 个操作实现题目要求,所以返回 3 。...可以证明,无法通过少于 3 个操作使数组和减少至少一半。 示例二: 输入:nums = [3,8,20] 输出:3 解释:初始 nums 的和为 3 + 8 + 20 = 31 。...nums 的和减小了 31 - 14.5 = 16.5 ,减小的部分超过了初始数组和的一半, 16.5 >= 31/2 = 16.5 。 我们需要 3 个操作实现题目要求,所以返回 3 。

    24930

    将数组和减半的最少操作次数(优先队列)

    每一次操作中,你可以从 nums 中选择 任意 一个数并将它减小到 恰好 一半。(注意,在后续操作中你可以对减半过的数继续执行操作) 请你返回将 nums 数组和 至少 减少一半的 最少 操作数。...nums 的和减小了 33 - 14.75 = 18.25 ,减小的部分超过了初始数组和的一半,18.25 >= 33/2 = 16.5 。 我们需要 3 个操作实现题目要求,所以返回 3 。...可以证明,无法通过少于 3 个操作使数组和减少至少一半。 示例 2: 输入:nums = [3,8,20] 输出:3 解释:初始 nums 的和为 3 + 8 + 20 = 31 。...nums 的和减小了 31 - 14.5 = 16.5 ,减小的部分超过了初始数组和的一半, 16.5 >= 31/2 = 16.5 。 我们需要 3 个操作实现题目要求,所以返回 3 。...可以证明,无法通过少于 3 个操作使数组和减少至少一半。

    23220

    到家的最少跳跃次数(BFS)

    题目 有一只跳蚤的家在数轴上的位置 x 处。请你帮助它从位置 0 出发,到达它的家。 跳蚤跳跃的规则如下: 它可以 往前 跳恰好 a 个位置(即往右跳)。...它不能跳到任何 forbidden 数组中的位置。 跳蚤可以往前跳 超过 它的家的位置,但是它 不能跳到负整数 的位置。...给你一个整数数组 forbidden ,其中 forbidden[i] 是跳蚤不能跳到的位置,同时给你整数 a, b 和 x ,请你返回跳蚤到家的最少跳跃次数。...如果没有恰好到达 x 的可行方案,请你返回 -1 。...解题 广度优先搜索,搜索的位置需要比 x 大一些 然后往回跳的时候,注意不用标记已经访问过,往前跳的时候标记访问即可 class Solution { public: int minimumJumps

    54710

    通过最少操作次数使数组的和相等(贪心+双指针)

    每次操作中,你可以选择 任意 数组中的任意一个整数,将它变成 1 到 6 之间 任意 的值(包含 1 和 6)。...请你返回使 nums1 中所有数的和与 nums2 中所有数的和相等的最少操作次数。 如果无法使两个数组的和相等,请返回 -1 。...示例 1: 输入:nums1 = [1,2,3,4,5,6], nums2 = [1,1,2,2,2,2] 输出:3 解释:你可以通过 3 次操作使 nums1 中所有数的和与 nums2 中所有数的和相等...示例 3: 输入:nums1 = [6,6], nums2 = [1] 输出:3 解释:你可以通过 3 次操作使 nums1 中所有数的和与 nums2 中所有数的和相等。...解题 排序,优先使用 sum 大的数组 能降低的最多的,或者 sum 小的数组能升高最多的 class Solution { public: int minOperations(vector<int

    45430

    最少侧跳次数

    最少侧跳次数 显示英文描述 通过的用户数1397 尝试过的用户数2030 用户总通过次数1416 用户总提交次数3621 题目难度Medium 给你一个长度为 n 的 3 跑道道路 ,它总共包含...给你一个长度为 n + 1 的数组 obstacles ,其中 obstacles[i] (取值范围从 0 到 3)表示在点 i 处的 obstacles[i] 跑道上有一个障碍。...这只青蛙从点 i 跳到点 i + 1 且跑道不变的前提是点 i + 1 的同一跑道上没有障碍。...为了躲避障碍,这只青蛙也可以在 同一个 点处 侧跳 到 另外一条 跑道(这两条跑道可以不相邻),但前提是跳过去的跑道该点处没有障碍。...比方说,这只青蛙可以从点 3 处的跑道 3 跳到点 3 处的跑道 1 。 这只青蛙从点 0 处跑道 2 出发,并想到达点 n 处的 任一跑道 ,请你返回 最少侧跳次数 。

    27010

    通过最少操作次数使数组的和相等(难度:中等)

    每次操作中,你可以选择 任意 数组中的任意一个整数,将它变成 1 到 6 之间 任意 的值(包含 1 和 6)。 请你返回使 nums1 中所有数的和与 nums2 中所有数的和相等的最少操作次数。...为了便于画图,图中采用Map结构表示: 【步骤4】由于要求计算出最小操作次数,所以我们需要从range数组末尾开始遍历执行对比操作,以上面图中的例子做演示,diff=11,range=[1,1,1,1,5,3...]: 【第1次操作】因为差值diff > 跨度5,所以差值diff变为6(11减5),range[5]的出现次数变为2(3减1); 【第2次操作】因为差值diff > 跨度5,所以差值diff变为1(6...减5),range[5]的出现次数变为1(2减1); 【第3次操作】因为差值diff 最少操作次数为:3。...while (range[i] > 0) { // 如果差值range[i]出现的次数不为0 result++; // 操作次数加1

    19710

    最少移动次数使数组元素相等

    最少移动次数使数组元素相等 1. 题目描述 给定一个非空整数数组,找到使所有数组元素相等所需的最小移动数,其中每次移动可将选定的一个元素加1或减1。您可以假设数组的长度最多为10000。...例如: 输入: [1,2,3] 输出: 2 说明:只有两个动作是必要的(记得每一步仅可使其中一个元素加1或减1): [1,2,3] => [2,2,3] => [2,2,2] 来源:力扣(LeetCode...题解 这道题偏数学一点,我们从常理推论的角度去想,如果要找到使所有数组元素相等的最小移动数。那么这个元素就是数组其他元素离它距离之和最近的数,这个元素就是数组中的中位数。...2.1 解题步骤 对数组元素进行排序 找到中位数 遍历数组,计算所有元素与中位数的距离 累加距离,即可得到目标值。...nums) { // 对数组进行排序 Arrays.sort(nums); int result = 0; // 遍历数组,计算与中位数的距离

    46930

    得到子序列的最少操作次数(最长上升子序DP nlogn)

    题目 给你一个数组 target ,包含若干 互不相同 的整数,以及另一个整数数组 arr ,arr 可能 包含重复元素。 每一次操作中,你可以在 arr 的任意位置插入任一整数。...请你返回 最少 操作次数,使得 target 成为 arr 的一个子序列。 一个数组的 子序列 指的是删除原数组的某些元素(可能一个元素都不删除),同时不改变其余元素的相对顺序得到的数组。...解题 动态规划应用–最长递增子序列 LeetCode 300 建立新的数组 arr_idx,把 arr 中 出现在 target 里的数字,这个数字对应在 target 里的下标存入 然后对 arr_idx...使用 nlogn 的 最长上升子序 DP 注意本题的 互不相同 条件,没有这个条件,以下解法失效 class Solution { public: int minOperations(vector...cur); else *pos = cur; } return target.size()-dp.size();//最少操作次数

    63920

    穿过迷宫的最少移动次数(状态压缩BFS)

    题目 你还记得那条风靡全球的贪吃蛇吗? 我们在一个 n*n 的网格上构建了新的迷宫地图,蛇的长度为 2,也就是说它会占去两个单元格。 蛇会从左上角((0, 0) 和 (0, 1))开始移动。...蛇需要移动到迷宫的右下角((n-1, n-2) 和 (n-1, n-1))。 每次移动,蛇可以这样走: 如果没有障碍,则向右移动一个单元格。并仍然保持身体的水平/竖直状态。...并仍然保持身体的水平/竖直状态。 如果它处于水平状态并且其下面的两个单元都是空的,就顺时针旋转 90 度。蛇从((r, c)、(r, c+1))移动到 ((r, c)、(r+1, c))。...如果它处于竖直状态并且其右面的两个单元都是空的,就逆时针旋转 90 度。蛇从((r, c)、(r+1, c))移动到((r, c)、(r, c+1))。 ? 返回蛇抵达目的地所需的最少移动次数。...解题 把尾巴的坐标 x,y 还有方向 d,三个信息编码成101进制数 然后蛇可以三种走法:前进、整体平移、绕尾巴旋转 class Solution { vector> dir

    63720

    最小操作次数问题

    // //- 2 * x + y:表示数组中0的数量乘以2,再加上1的数量。这是因为在这个问题中,我们假设每个0可以与一个1配对,每个1可以与一个0配对,所以0的数量乘以2就是可以形成的配对数量。...然后再加上1的数量,就是可以形成的配对数量加上没有配对的1的数量。 // //- 2 * z + x:表示数组中2的数量乘以2,再加上0的数量。...这是因为在这个问题中,我们假设每个2可以与一个0配对,每个0可以与一个2配对,所以2的数量乘以2就是可以形成的配对数量。然后再加上0的数量,就是可以形成的配对数量加上没有配对的0的数量。...// //- 2 * y + z:表示数组中1的数量乘以2,再加上2的数量。这是因为在这个问题中,我们假设每个1可以与一个2配对,每个2可以与一个1配对,所以1的数量乘以2就是可以形成的配对数量。...然后再加上2的数量,就是可以形成的配对数量加上没有配对的2的数量。 // //这个函数fun()的目的是找出这三个表达式中的最大值,也就是可以形成的最多的配对数量。

    12610

    使字符串有序的最少操作次数(数位dp+逆元+快速幂+排列)「建议收藏」

    交换下标为 i – 1​​​​ 和 j​​​​ 处的两个字符。 将下标 i 开始的字符串后缀反转。 请你返回将字符串变成有序的最少操作次数。...交换 s[1] 和 s[2] 得到 s="cab" ,然后反转下标从 2 开始的后缀字符串,得到 s="cab" 。 操作 2:i=1,j=2。...交换 s[0] 和 s[2] 得到 s="bac" ,然后反转下标从 1 开始的后缀字符串,得到 s="bca" 。 操作 3:i=2,j=2。...交换 s[1] 和 s[2] 得到 s="bac" ,然后反转下标从 2 开始的后缀字符串,得到 s="bac" 。 操作 4:i=1,j=1。...交换 s[0] 和 s[1] 得到 s="abc" ,然后反转下标从 1 开始的后缀字符串,得到 s="acb" 。 操作 5:i=2,j=2。

    21720
    领券