leetcode-1449-数位成本和为目标值的最大数字

数位成本和为目标值的最大数字

题面

leetcode题目

给你一个整数数组 \(cost\) 和一个整数 \(target\) 。请你返回满足如下规则可以得到的 最大 整数:

  • 给当前结果添加一个数位\((i + 1)\)的成本为 \(cost[i]\) (\(cost\) 数组下标从 \(0\) 开始)。
  • 总成本必须恰好等于 \(target\) 。
  • 添加的数位中没有数字 \(0\)

由于答案可能会很大,请你以字符串形式返回。

如果按照上述要求无法得到任何整数,请你返回 "0" 。

example

输入:\(cost = [4,3,2,5,6,7,2,5,5]\), \(target = 9\)
输出:"7772"
解释:添加数位 '7' 的成本为 \(2\) ,添加数位 '2' 的成本为 \(3\) 。所以 "7772" 的代价为 \(2\times 3+ 3\times 1 = 9\) 。 "977" 也是满足要求的数字,但 "7772" 是较大的数字。
数字 成本
1 -> 4
2 -> 3
3 -> 2
4 -> 5
5 -> 6
6 -> 7
7 -> 2
8 -> 5
9 -> 5

阅读更多

leetcode-518-零钱兑换II

零钱兑换 II

题面

leetcode题目

给定不同面额的硬币和一个总金额。写出函数来计算可以凑成总金额的硬币组合数。假设每一种面额的硬币有无限个。

example

输入: \(amount = 5\), \(coins = [1, 2, 5]\)
输出: \(4\)
解释: 有四种方式可以凑成总金额:

  • \(5=5\)
  • \(5=2+2+1\)
  • \(5=2+1+1+1\)
  • \(5=1+1+1+1+1\)
阅读更多

leetcode-879-盈利计划

盈利计划

题面

leetcode题目

集团里有 \(n\) 名员工,他们可以完成各种各样的工作创造利润。

第 \(i\) 种工作会产生 \(profit[i]\) 的利润,它要求 \(group[i]\) 名成员共同参与。如果成员参与了其中一项工作,就不能参与另一项工作。

工作的任何至少产生 \(minProfit\) 利润的子集称为 盈利计划 。并且工作的成员总数最多为 \(n\)

有多少种计划可以选择?因为答案很大,所以 返回结果模 \(10^9 + 7\) 的值

example

输入:\(n = 5\), \(minProfit = 3\), \(group = [2,2]\), \(profit = [2,3]\)
输出:\(2\)
解释:至少产生 \(3\) 的利润,该集团可以完成工作 \(0\) 和工作 \(1\) ,或仅完成工作 \(1\) 。 总的来说,有两种计划。

阅读更多

leetcode-1049-最后一块石头的重量II

最后一块石头的重量 II

题面

leetcode题目

有一堆石头,用整数数组 \(stones\) 表示。其中 \(stones[i]\) 表示第 \(i\) 块石头的重量。

每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 \(x\) 和 \(y\),且 \(x \leq y\)。那么粉碎的可能结果如下:

  • 如果 \(x = y\),那么两块石头都会被完全粉碎;
  • 如果 \(x\neq y\),那么重量为 \(x\) 的石头将会完全粉碎,而重量为 \(y\) 的石头新重量为 \(y-x\)
  • 最后,最多只会剩下一块 石头。返回此石头 最小的可能重量 。如果没有石头剩下,就返回 \(0\)

example

输入:\(stones = [2,7,4,1,8,1]\)
输出:\(1\)
解释:
组合 \(2\)\(4\),得到 \(2\),所以数组转化为 \([2,7,1,8,1]\)
组合 \(7\)\(8\),得到 \(1\),所以数组转化为 \([2,1,1,1]\)
组合 \(2\)\(1\),得到 \(1\),所以数组转化为 \([1,1,1]\)
组合 \(1\)\(1\),得到 \(0\),所以数组转化为 \([1]\),这就是最优值。

阅读更多

leetcode-494-目标和

目标和

题面

leetcode题目

给你一个整数数组 \(nums\) 和一个整数 \(target\)

向数组中的每个整数前添加 \(+\)\(-\) ,然后串联起所有整数,可以构造一个 表达式

  • 例如,\(nums = [2, 1]\) ,可以在 \(2\) 之前添加 \(+\) ,在 \(1\) 之前添加 \(-\) ,然后串联起来得到表达式 \(+2-1\)

返回可以通过上述方法构造的、运算结果等于 \(target\) 的不同 表达式 的数目。

example

输入:\(nums = [1,1,1,1,1]\), \(target = 3\)
输出:\(5\)
解释:一共有 \(5\) 种方法让最终目标和为 \(3\)

  • \(-1 + 1 + 1 + 1 + 1 = 3\)
  • \(+1 - 1 + 1 + 1 + 1 = 3\)
  • \(+1 + 1 - 1 + 1 + 1 = 3\)
  • \(+1 + 1 + 1 - 1 + 1 = 3\)
  • \(+1 + 1 + 1 + 1 - 1 = 3\)
阅读更多

leetcode-474-一和零

一和零

题面

leetcode题目

给你一个二进制字符串数组 \(strs\) 和两个整数 \(m\)\(n\)

请你找出并返回 \(strs\) 的最大子集的大小,该子集中最多\(m\)\(0\)\(n\)\(1\)

如果 \(x\) 的所有元素也是 \(y\) 的元素,集合 \(x\) 是集合 \(y\)子集

example

输入:\(strs = [10, 0001, 111001, 1, 0]\), \(m = 5\), \(n = 3\)
输出:\(4\) 解释:最多有 \(5\)\(0\)\(3\)\(1\) 的最大子集是 \(\{10,0001,1,0\}\) ,因此答案是 \(4\)
其他满足题意但较小的子集包括 \(\{0001,1\}\)\(\{10,1,0\}\)\(\{111001\}\) 不满足题意,因为它含 \(4\)\(1\) ,大于 \(n\) 的值 \(3\)

阅读更多

leetcode-160-相交链表

相交链表

题面

leetcode题目

给你两个单链表的头节点 \(headA\)\(headB\) ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 \(null\)

图示两个链表在节点 \(c1\) 开始相交:
示例1图片 题目数据 保证 整个链式结构中不存在环。

注意,函数返回结果后,链表必须 保持其原始结构

example

示例1图片

输入:\(intersectVal = 8\), \(listA = [4,1,8,4,5]\), \(listB = [5,0,1,8,4,5]\), \(skipA = 2\), \(skipB = 3\)
输出:Intersected at '8'
解释:相交节点的值为 \(8\) (注意,如果两个链表相交则不能为 \(0\))。
从各自的表头开始算起,链表 \(A\)\([4,1,8,4,5]\),链表 \(B\)\([5,0,1,8,4,5]\)
\(A\) 中,相交节点前有 \(2\) 个节点;在 \(B\) 中,相交节点前有 \(3\) 个节点。

阅读更多

leetcode-525-连续数组

连续数组

题面

leetcode题目

给定一个二进制数组 \(nums\) , 找到含有相同数量的 \(0\)\(1\) 的最长连续子数组,并返回该子数组的长度。

example

输入: \(nums = [0,1]\)
输出: \(2\)
说明: \([0, 1]\) 是具有相同数量0和1的最长连续子数组。

阅读更多

leetcode-523-连续的子数组和

连续的子数组和

题面

leetcode题目

给你一个整数数组 \(nums\) 和一个整数 \(k\) ,编写一个函数来判断该数组是否含有同时满足下述条件的连续子数组:

  • 子数组大小 至少为 \(2\) ,且
  • 子数组元素总和为 \(k\) 的倍数。
  • 如果存在,返回 \(true\) ;否则,返回 \(false\)

如果存在一个整数 \(n\) ,令整数 \(x\) 符合 \(x = n \times k\) ,则称 \(x\)\(k\) 的一个倍数。

example

输入:\(nums = [23,2,4,6,7]\), \(k = 6\)
输出:\(true\)
解释:\([2,4]\) 是一个大小为 \(2\) 的子数组,并且和为 \(6\)

阅读更多

leetcode-1744-你能在你最喜欢那天迟到你最喜欢的糖果吗?

你能在你最喜欢那天迟到你最喜欢的糖果吗?

题面

leetcode题目

给你一个下标从 \(0\) 开始的正整数数组 \(candiesCount\) ,其中 \(candiesCount[i]\) 表示你拥有的第 \(i\) 类糖果的数目。同时给你一个二维数组 \(queries\) ,其中 \(queries[i] = [favoriteType_i, favoriteDay_i, dailyCap_i]\) 。

你按照如下规则进行一场游戏:

  • 你从第 \(0\) 天开始吃糖果。
  • 你在吃完 所有 第 \(i - 1\) 类糖果之前,不能 吃任何一颗第 \(i\) 类糖果。
  • 在吃完所有糖果之前,你必须每天 至少 吃 一颗 糖果。

请你构建一个布尔型数组 \(answer\) ,满足 \(answer.length == queries.length\)\(answer[i]\) 为 \(true\) 的条件是:在每天吃 不超过 \(dailyCap_i\) 颗糖果的前提下,你可以在第 \(favoriteDay_i\) 天吃到第 \(favoriteType_i\) 类糖果;否则 \(answer[i]\) 为 \(false\) 。注意,只要满足上面 \(3\) 条规则中的第二条规则,你就可以在同一天吃不同类型的糖果。

请你返回得到的数组 \(answer\) 。

example

输入:\(candiesCount = [7,4,5,3,8]\), \(queries = [[0,2,2],[4,2,4],[2,13,1000000000]]\)
输出:\([true,false,true]\)
提示:
1- 在第 \(0\) 天吃 \(2\) 颗糖果(类型 \(0\)),第 \(1\) 天吃 \(2\) 颗糖果(类型 \(0\)),第 \(2\) 天你可以吃到类型 \(0\) 的糖果。
2- 每天你最多吃 \(4\) 颗糖果。即使第 \(0\) 天吃 \(4\) 颗糖果(类型 \(0\)),第 \(1\) 天吃 \(4\) 颗糖果(类型 \(0\) 和类型 \(1\)),你也没办法在第 \(2\) 天吃到类型 \(4\) 的糖果。换言之,你没法在每天吃 \(4\) 颗糖果的限制下在第 \(2\) 天吃到第 \(4\) 类糖果。
3- 如果你每天吃 \(1\) 颗糖果,你可以在第 \(13\) 天吃到类型 \(2\) 的糖果。

阅读更多