2020-12-22 Daily-Challenge
Today I have done Make Two Arrays Equal by Reversing Sub-arrays on leetcode and leetcode's December LeetCoding Challenge with cpp
.
Make Two Arrays Equal by Reversing Sub-arrays
Description
Given two integer arrays of equal length target
and arr
.
In one step, you can select any non-empty sub-array of arr
and reverse it. You are allowed to make any number of steps.
Return True if you can make arr
equal to target
, or False otherwise.
Example 1:
Input: target = [1,2,3,4], arr = [2,4,1,3]
Output: true
Explanation: You can follow the next steps to convert arr to target:
1- Reverse sub-array [2,4,1], arr becomes [1,4,2,3]
2- Reverse sub-array [4,2], arr becomes [1,2,4,3]
3- Reverse sub-array [4,3], arr becomes [1,2,3,4]
There are multiple ways to convert arr to target, this is not the only way to do so.
Example 2:
Input: target = [7], arr = [7]
Output: true
Explanation: arr is equal to target without any reverses.
Example 3:
Input: target = [1,12], arr = [12,1]
Output: true
Example 4:
Input: target = [3,7,9], arr = [3,7,11]
Output: false
Explanation: arr doesn't have value 9 and it can never be converted to target.
Example 5:
Input: target = [1,1,1,1,1], arr = [1,1,1,1,1]
Output: true
Constraints:
target.length == arr.length
1 <= target.length <= 1000
1 <= target[i] <= 1000
1 <= arr[i] <= 1000
Solution
use count
class Solution {
public:
bool canBeEqual(vector<int>& target, vector<int>& arr) {
int cnt[1001] = {0};
for(auto i : target) {
cnt[i] += 1;
}
for(auto i : arr) {
cnt[i] -= 1;
}
for(int i = 0; i <= 1000; ++i) {
if(cnt[i]) return false;
}
return true;
}
};
or check if there are permutations of each other.
class Solution {
public:
bool canBeEqual(vector<int>& target, vector<int>& arr) {
sort(target.begin(), target.end());
sort(arr.begin(), arr.end());
return arr == target;
}
};
December LeetCoding Challenge 22
Description
Balanced Binary Tree
Given a binary tree, determine if it is height-balanced.
For this problem, a height-balanced binary tree is defined as:
a binary tree in which the left and right subtrees of every node differ in height by no more than 1.
Example 1:
Input: root = [3,9,20,null,null,15,7]
Output: true
Example 2:
Input: root = [1,2,2,3,3,null,null,4,4]
Output: false
Example 3:
Input: root = []
Output: true
Constraints:
- The number of nodes in the tree is in the range
[0, 5000]
. -104 <= Node.val <= 104
Solution
balanced binary tree is not balanced binary search tree
class Solution {
pair<bool, int> getMinMax(TreeNode* root) {
if(!root) return make_pair(true, 0);
auto [balancedLeft, heightLeft] = getMinMax(root->left);
auto [balancedRight, heightRight] = getMinMax(root->right);
int diff = abs(heightLeft-heightRight);
bool balanced = balancedLeft && balancedRight && diff < 2;
return make_pair(balanced, 1+max(heightRight, heightLeft));
}
public:
bool isBalanced(TreeNode* root) {
auto [balanced, _height] = getMinMax(root);
return balanced;
}
};