WeeklyContest14

其实没做过LeetCode的 contest

url: https://leetcode.com/contest/leetcode-weekly-contest-14

今天头疼就virtual一场结果脸比较好 抽到的题很简单….

Score 3:

Number Complement : 简单的把一个数二进制下0换成1 1换成0

xjb写 由于人比较蠢不会用位运算就全算出来了

My_Code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Solution {
public:
int findComplement(int num) {
vector<int>q;
while(num){
q.push_back(num%2);
num/=2;
}
int ss=q.size();
for(int i=ss-1;i>=0;i--){
if(q[i]==1) q[i]=0;
else q[i]=1;
}
int ans=0;
for(int i=ss-1;i>=0;i--){
ans*=2;
ans+=q[i];
}
return ans;
}
};

Score 6:

Magical String :一个魔法字符串仅由1和2组成,这个字符串是自生成的。

魔法字符串:“1221121221221121122”

分组后:1 22 11 2 1 22 1 22 11 2 11 22..

每组中个数为:1 2 2 1 1 2 1 2 2 1 2 2

你会发现以上三个都是同一个字符串(无视空格)

N不超过100000

XJB模拟一瞎就好了…详情见代码

My_Code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class Solution {
public:
int magicalString(int n) {
if (n == 0) {
return 0;
}
if (n >= 1 && n <= 3) {
return 1;
}
int count = 1, num = 1, head = 2, tail = 3;
int* arr = new int[n + 1];
arr[0] = 1;
arr[1] = arr[2] = 2;
while (tail < n) {
for (int i = 0; i < arr[head]; i++) {
arr[tail] = num;
if (tail < n && num == 1) {
count++;
}
tail++;
}
num = num ^ 3;
head++;
}
return count;
}
};

Score 7:

License Key Formatting :

给一个有大小写字母和’-‘的字符串 要你按照K个一组将他恢复成最开始的样子 最前的一组可以不满足K

随便模拟一下

My_Code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Solution {
public:
string licenseKeyFormatting(string S, int K) {
string tmp;
int ss=S.size();
for(int i=0;i<ss;i++){
if(S[i]=='-') continue;
else if(S[i]>='a'&&S[i]<='z') tmp+=S[i]-'a'+'A';
else tmp+=S[i];
}
int st=tmp.size();
string ans;
int cnt=0;
for(int i=st-1;i>=0;i--){
ans+=tmp[i];
cnt++;
if(cnt==K&&i!=0){
cnt=0;
ans+='-';
}
}
reverse(ans.begin(),ans.end());
return ans;
}
};

Score 9:

Sliding Window Median : 唯一一个难一点的题

给一个数组,再给一个K长度的滑窗要,这个滑窗一点点向后移动,求滑窗内中位数。

一开始想是平衡树,再看看感觉两个heap就够了,对于没用的数我们不一定要从heap里拿掉,可以标记一下。

类似题:POJ 3784 Running Median

详情见code

My_Code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class Solution {
public:
vector<double> medianSlidingWindow(vector<int>& nums, int k) {
vector<double> medians;
unordered_map<int, int> hash;
priority_queue<int, vector<int>> bheap;
priority_queue<int, vector<int>, greater<int>> theap;
int i = 0;
while (i < k) bheap.push(nums[i++]);
for (int count = k/2; count > 0; --count) theap.push(bheap.top()); bheap.pop();
while (true) {
if (k % 2) medians.push_back(bheap.top());
else medians.push_back( ((double)bheap.top() + theap.top()) / 2 );

if (i == nums.size()) break;
int m = nums[i-k], n = nums[i++], balance = 0;
if (m <= bheap.top()) { --balance; if (m == bheap.top()) bheap.pop(); else ++hash[m]; }
else { ++balance; if (m == theap.top()) theap.pop(); else ++hash[m]; }
if (!bheap.empty() && n <= bheap.top()) { ++balance; bheap.push(n); }
else { --balance; theap.push(n); }
if (balance < 0) { bheap.push(theap.top()); theap.pop(); }
else if (balance > 0) { theap.push(bheap.top()); bheap.pop(); }
while (!bheap.empty() && hash[bheap.top()]) { --hash[bheap.top()]; bheap.pop(); }
while (!theap.empty() && hash[theap.top()]) { --hash[theap.top()]; theap.pop(); }
}
return medians;
}
};

总结:我好菜啊 WA了好多次….最后一题做的也好慢….我死了