2021-08-11 Daily-Challenge
Today I have done Largest Time for Given Digits and leetcode's August LeetCoding Challenge with cpp.
Largest Time for Given Digits
Description
Given an array arr of 4 digits, find the latest 24-hour time that can be made using each digit exactly once.
24-hour times are formatted as "HH:MM", where HH is between 00 and 23, and MM is between 00 and 59. The earliest 24-hour time is 00:00, and the latest is 23:59.
Return the latest 24-hour time in "HH:MM" format. If no valid time can be made, return an empty string.
Example 1:
Input: arr = [1,2,3,4]
Output: "23:41"
Explanation: The valid 24-hour times are "12:34", "12:43", "13:24", "13:42", "14:23", "14:32", "21:34", "21:43", "23:14", and "23:41". Of these times, "23:41" is the latest.
Example 2:
Input: arr = [5,5,5,5]
Output: ""
Explanation: There are no valid 24-hour times as "55:55" is not valid.
Example 3:
Input: arr = [0,0,0,0]
Output: "00:00"
Example 4:
Input: arr = [0,0,1,0]
Output: "10:00"
Constraints:
arr.length == 40 <= arr[i] <= 9
Solution
auto speedup = [](){
cin.tie(nullptr);
cout.tie(nullptr);
ios::sync_with_stdio(false);
return 0;
}();
class Solution {
public:
string largestTimeFromDigits(vector<int>& arr) {
sort(arr.begin(), arr.end());
string answer = ":::::";
do {
if(arr[0] > 2) break;
if(arr[0] == 2 && arr[1] > 3) break;
if(arr[2] > 5) continue;
answer[0] = arr[0] + '0';
answer[1] = arr[1] + '0';
answer[3] = arr[2] + '0';
answer[4] = arr[3] + '0';
} while(next_permutation(arr.begin(), arr.end()));
return answer[0] != ':' ? answer : "";
}
};
// Accepted
// 172/172 cases passed (4 ms)
// Your runtime beats 56.47 % of cpp submissions
// Your memory usage beats 17.45 % of cpp submissions (9.7 MB)
August LeetCoding Challenge 11
Description
Array of Doubled Pairs
Given an array of integers arr of even length, return true if and only if it is possible to reorder it such that arr[2 * i + 1] = 2 * arr[2 * i] for every 0 <= i < len(arr) / 2.
Example 1:
Input: arr = [3,1,3,6]
Output: false
Example 2:
Input: arr = [2,1,2,6]
Output: false
Example 3:
Input: arr = [4,-2,2,-4]
Output: true
Explanation: We can take two groups, [-2,-4] and [2,4] to form [-2,-4,2,4] or [2,4,-2,-4].
Example 4:
Input: arr = [1,2,4,16,8,4]
Output: false
Constraints:
0 <= arr.length <= 3 * 104arr.lengthis even.-105 <= arr[i] <= 105
Solution
auto speedup = [](){
cin.tie(nullptr);
cout.tie(nullptr);
ios::sync_with_stdio(false);
return 0;
}();
class Solution {
bool valid(map<int, int> cnt) {
for(auto [i, c] : cnt) {
if(!c) continue;
if(!cnt.count(i * 2) || cnt[2 * i] < c) return false;
cnt[i * 2] -= c;
}
return true;
}
public:
bool canReorderDoubled(vector<int>& arr) {
map<int, int> cnt;
for(auto i : arr) {
if(i >= 0) cnt[i] += 1;
}
if((cnt[0]&1) || !valid(cnt)) return false;
cnt.clear();
for(auto i : arr) {
if(i < 0) cnt[0 - i] += 1;
}
return valid(cnt);
}
};
// Accepted
// 102/102 cases passed (48 ms)
// Your runtime beats 100 % of cpp submissions
// Your memory usage beats 16.93 % of cpp submissions (58.9 MB)