LCR 165. 解密数字
现有一串神秘的密文 ciphertext,经调查,密文的特点和规则如下:
密文由非负整数组成
数字 0-25 分别对应字母 a-z
请根据上述规则将密文 ciphertext 解密为字母,并返回共有多少种解密结果。
示例 1:
**输入:**ciphertext = 216612
**输出:**6
**解释:**216612 解密后有 6 种不同的形式,分别是 “cbggbc”,“vggbc”,“vggm”,“cbggm”,“cqgbc” 和 “cqgm”
提示:
0 <= ciphertext < 2^(31)
当你面对 216612 时,会发现:
想要知道整个序列有多少种解法,取决于你如何处理最后一位(或两位)数字。
如果你把最后的 2 单独解密,那么剩下的问题就是 21661 的解法数。
如果你把最后的 12 合并解密,那么剩下的问题就是 2166 的解法数。
很容易想到动态规划,用dp[i]表示前i位的解密结果
有dp[i] = dp[i-1] + dp[i-2],(i与i-1位在10-26之间时加dp[i-2])
1234567891011121314151617 ...
LCR 164. 破解闯关密码
闯关游戏需要破解一组密码,闯关组给出的有关密码的线索是:
一个拥有密码所有元素的非负整数数组 password
密码是 password 中所有元素拼接后得到的最小的一个数
请编写一个程序返回这个密码。
示例 1:
**输入:**password = [15, 8, 7]
输出:“1578”
示例 2:
**输入:**password = [0, 3, 30, 34, 5, 9]
输出:“03033459”
提示:
0 < password.length <= 100
说明:
输出结果可能非常大,所以你需要返回一个字符串而不是整数
拼接起来的数字可能会有前导 0,最后结果不需要去掉前导 0
只要保证最小的数在高位就行,很容易想到转成string后排序
排序其实就是两两比较,那a与b比较怎么判断谁在前,一开始想到a<b就行,但是会出现短字符串是长字符串前缀的问题如3和30,想到比较时结果就两种情况,ab与ba(330,303),那就可以直接比较字符串拼接a+b<b+a则a应该在前
1234567891011121314151617181920class Solut ...
LCR 161. 连续天数的最高销售额
某公司每日销售额记于整数数组 sales,请返回所有 连续 一或多天销售额总和的最大值。
要求实现时间复杂度为 O(n) 的算法。
示例 1:
**输入:**sales = [-2,1,-3,4,-1,2,1,-5,4]
**输出:**6
解释:[4,-1,2,1] 此连续四天的销售总额最高,为 6。
示例 2:
**输入:**sales = [5,4,-1,7,8]
**输出:**23
解释:[5,4,-1,7,8] 此连续五天的销售总额最高,为 23。
提示:
1 <= arr.length <= 10^5
-100 <= arr[i] <= 100
动态规划,dp[i]表示以i结尾的最大值,最后返回max(dp[i])即可
dp[i] = max(dp[i-1] + sales[i], sales[i])
dp[i]只与前一个状态和sales[i]有关,所以我们只需要一个变量保存前一状态即可
12345678910111213class Solution {public: int maxSales(vector<int> &am ...
LCR 160. 数据流中的中位数
中位数 是有序整数列表中的中间值。如果列表的大小是偶数,则没有中间值,中位数是两个中间值的平均值。
例如,
[2,3,4] 的中位数是 3
[2,3] 的中位数是 (2 + 3) / 2 = 2.5
设计一个支持以下两种操作的数据结构:
void addNum(int num) - 从数据流中添加一个整数到数据结构中。
double findMedian() - 返回目前所有元素的中位数。
示例 1:
输入:
[“MedianFinder”,“addNum”,“addNum”,“findMedian”,“addNum”,“findMedian”]
[[],[1],[2],[],[3],[]]
输出:[null,null,null,1.50000,null,2.00000]
示例 2:
输入:
[“MedianFinder”,“addNum”,“findMedian”,“addNum”,“findMedian”]
[[],[2],[],[3],[]]
输出:[null,null,2.00000,null,2.50000]
提示:
最多会对 addNum、findMedian 进行 500 ...
LCR 159. 库存管理 III
仓库管理员以数组 stock 形式记录商品库存表,其中 stock[i] 表示对应商品库存余量。请返回库存余量最少的 cnt 个商品余量,返回 顺序不限。
示例 1:
**输入:**stock = [2,5,7,4], cnt = 1
输出:[2]
示例 2:
**输入:**stock = [0,2,3,6], cnt = 2
输出:[0,2] 或 [2,0]
提示:
0 <= cnt <= stock.length <= 10000
0 <= stock[i] <= 10000
使用快速排序的思想:
快排是选择一个基准数,然后将所有小于基准数的值移到基准数左边,大于基准数的值移到基准数右边
满足“左子数组任意元素<=基准数<=右子数组任意元素”
然后再分别对基准数左右两边进行排序
本题只要最小的cnt个值,所以只要 基准数的索引==cnt-1,就有左子数组满足要求
123456789101112131415161718192021222324252627class Solution {public: vector<int ...
LCR 158. 库存管理 II
仓库管理员以数组 stock 形式记录商品库存表。stock[i] 表示商品 id,可能存在重复。请返回库存表中数量大于 stock.length / 2 的商品 id。
示例 1:
**输入:**stock = [6, 1, 3, 1, 1, 1]
**输出:**1
提示:
1 <= stock.length <= 50000
给定数组为非空数组,且存在结果数字
直接使用哈希表
12345678910111213class Solution {public:int inventoryManagement(vector<int>& stock) {unordered_map<int, int> hash;int len = stock.size();for (int i : stock) {hash[i]++;if (hash[i] > len / 2)return i;}return -1;}};
摩尔投票
假设现在进行投票,我们要选出票数最多的人,并且此人票数比其他所有人加 ...







