春节刷题day17:LeetCode
面试题 01.06. 字符串压缩
面试题 16.11. 跳水板
面试题 17.10. 主要元素
面试题 01.04. 回文排列
面试题 08.01. 三步问题
面试题 04.04. 检查平衡性
1、面试题 01.06. 字符串压缩
class Solution {
public:
string compressString(string S) {
S += "#";
string ans;
int len = S.size();
int l = 0;
for(int i = 1; i < len; i++){
if(S[i] != S[i - 1]){
ans += S[i - 1];
ans += to_string(i - l);
l = i;
}
}
if(ans.size() < len - 1) return ans;
else return S.substr(0, len - 1);
}
};
2、面试题 16.11. 跳水板
class Solution {
public:
vector<int> divingBoard(int shorter, int longer, int k) {
vector<int> v;
if(!k) return v;
if(shorter == longer){
v.push_back(shorter * k);
return v;
}
for(int i = k; i >= 0; i--) v.push_back(i * shorter + (k - i) * longer);
return v;
}
};
3、面试题 17.10. 主要元素
class Solution {
public:
int majorityElement(vector<int>& nums) {
sort(nums.begin(), nums.end());
int size = nums.size();
int cnt = 0;
for(int i = 0; i < size; i++) if(nums[i] == nums[size / 2]) cnt++;
if(cnt > size / 2) return nums[size / 2];
return -1;
}
};
4、面试题 01.04. 回文排列
class Solution {
public:
map<char, int> pa;
bool canPermutePalindrome(string s) {
for(int i = 0; i < s.size(); i++){
pa[s[i]]++;
}
int cnt = 0;
for(auto i : pa){
if(i.second & 1) cnt++;
}
if(cnt > 1) return false;
return true;
}
};
5、面试题 08.01. 三步问题
class Solution {
public:
int waysToStep(int n) {
long long a, b, c, ans;
if(n == 1) return 1;
else if(n == 2) return 2;
else if(n == 3) return 4;
else{
a = 1; b = 2; c = 4;
for(int i = 4; i <= n; i++){
ans = (a + b + c) % 1000000007;
a = b; b = c; c = ans;
}
return ans;
}
}
};
6、面试题 04.04. 检查平衡性
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
int GetHigh(TreeNode* root){
if(root == NULL) return 0;
int l = GetHigh(root -> left);
int r = GetHigh(root -> right);
return max(l, r) + 1;
}
bool slove(TreeNode* root){
if(root == NULL) return true;
int l = GetHigh(root -> left);
int r = GetHigh(root -> right);
return slove(root -> left) && slove(root -> right) && abs(l - r) <= 1;
}
bool isBalanced(TreeNode* root) {
return slove(root);
}
};
2021/2/24完结(《面试题 17.10. 主要元素》这题并没有想到O(n)时间复杂度、O(1)空间复杂度的解法,等之后再仔细考虑下吧)。