作者:Maksim
题目一 reformat phone number
You are given a phone number as a string number. number consists of digits, spaces ‘ ‘, and/or dashes ‘-‘.
You would like to reformat the phone number in a certain manner. Firstly, remove all spaces and dashes. Then, group the digits from left to right into blocks of length 3 until there are 4 or fewer digits. The final digits are then grouped as follows:
- 2 digits: A single block of length 2.
- 3 digits: A single block of length 3.
- 4 digits: Two blocks of length 2 each.
The blocks are then joined by dashes. Notice that the reformatting process should never produce any blocks of length 1 and produce at most two blocks of length 2.
Return the phone number after formatting.
Example 1:
Input: number = “1-23-45 6”
Output:“123-456”
Explanation: The digits are “123456”.
Step 1: There are more than 4 digits, so group the next 3 digits. The 1st block is “123”.
Step 2: There are 3 digits remaining, so put them in a single block of length 3. The 2nd block is “456”.
Joining the blocks gives “123-456”.
Example 2:
Input: number = “123 4-567”
Output: “123-45-67”
Explanation: The digits are “1234567”.
Step 1: There are more than 4 digits, so group the next 3 digits. The 1st block is “123”.
Step 2: There are 4 digits left, so split them into two blocks of length 2. The blocks are “45” and “67”.
Joining the blocks gives “123-45-67”.
Example 3:
Input: number = “123 4-5678”
Output: “123-456-78”
Explanation: The digits are “12345678”.
Step 1: The 1st block is “123”.
Step 2: The 2nd block is “456”.
Step 3: There are 2 digits left, so put them in a single block of length 2. The 3rd block is “78”.
Joining the blocks gives “123-456-78”.
Example 4:
Input: number = “12”
Output: “12”
Example 5:
Input: number = “–17-5 229 35-39475 “
Output: “175-229-353-94-75”
Constraints:
- 2 <= number.length <= 100
- number consists of digits and the characters ‘-‘ and ‘ ‘.
- There are at least two digits in number.
题解
时间复杂度:$O(n)$
1 | class Solution { |
题目二maximum erasure value
You are given an array of positive integers nums and want to erase a subarray containing unique elements. The score you get by erasing the subarray is equal to the sum of its elements.
Return the maximum score you can get by erasing exactly one subarray.
An array b is called to be a subarray of a if it forms a contiguous subsequence of a, that is, if it is equal to a[l],a[l+1],…,a[r] for some (l,r).
Example 1:
Input: nums = [4,2,4,5,6]
Output: 17
Explanation: The optimal subarray here is [2,4,5,6].
Example 2:
Input: nums = [5,2,1,2,5,2,1,2,5]
Output: 8
Explanation: The optimal subarray here is [5,2,1] or [1,2,5].
Constraints:
- $1 <= nums.length <= 10^5$
- $1 <= nums[i] <= 10^4$
题解
思路:每次移动右指针,当某个数出现两次后,移动左指针到合法位置
时间复杂度:$O(n)$
1 | class Solution { |
题目三 jump game vi
You are given a 0-indexed integer array nums and an integer k.
You are initially standing at index 0. In one move, you can jump at most k steps forward without going outside the boundaries of the array. That is, you can jump from index i to any index in the range $[i + 1, min(n - 1, i + k)]$ inclusive.
You want to reach the last index of the array (index n - 1). Your score is the sum of all $nums[j]$ for each index j
you visited in the array.
Return the maximum score you can get.
Example 1:
Input: nums = [1,-1,-2,4,-7,3], k = 2
Output: 7
Explanation: You can choose your jumps forming the subsequence [1,-1,4,3] (underlined above). The sum is 7.
Example 2:
Input: nums = [10,-5,-2,4,0,3], k = 3
Output: 17
Explanation: You can choose your jumps forming the
subsequence [10,4,3] (underlined above). The sum is 17.
Example 3:
Input: nums = [1,-5,-20,4,-1,3,-6,-3], k = 2
Output: 0
Constraints:
- $1 <= nums.length, k <= 10^5$
- $-10^4 <= nums[i] <= 10^4$
题目三 maximum erasure value
You are given an array of positive integers nums and want to erase a subarray containing unique elements. The score you get by erasing the subarray is equal to the sum of its elements.
Return the maximum score you can get by erasing exactly one subarray.
An array b is called to be a subarray of a if it forms a contiguous subsequence of a, that is, if it is equal to a[l],a[l+1],…,a[r] for some (l,r).
Example 1:
Input: nums = [1,-1,-2,4,-7,3], k = 2
Output: 7
Explanation: You can choose your jumps forming the subsequence [1,-1,4,3] (underlined above). The sum is 7.
Example 2:
Input: nums = [10,-5,-2,4,0,3], k = 3
Output: 17
Explanation: You can choose your jumps forming the subsequence [10,4,3] (underlined above). The sum is 17.
Example 3:
Input: nums = [1,-5,-20,4,-1,3,-6,-3], k = 2
Output: 0
Constraints:
- $1 <= nums.length, k <= 10^5$
- $-10^4 <= nums[i] <= 10^4$
题解
思路:单调队列优化DP
$$
dp[i] = \max(dp[i-1],\dots,dp[i-k])+nums[i]
$$
用单调队列来维护后连续k个dp值得最大值即可
时间复杂度 $O(n)$
1 | class Solution { |
发布时间: 2020-12-27
最后更新: 2021-08-19
本文标题: 19.LeetCode第220场周赛
本文链接: https://yitee.top/posts/31317.html
版权声明: 本作品采用 CC BY-NC-SA 4.0 许可协议进行许可。转载请注明出处!
