Skip to content

Commit f65df7b

Browse files
committed
feat: add cpp solutions to lcof problems: No.41,43,45
1 parent 46943c5 commit f65df7b

File tree

6 files changed

+163
-0
lines changed

6 files changed

+163
-0
lines changed

lcof/面试题41. 数据流中的中位数/README.md

+37
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,43 @@ MedianFinder.prototype.findMedian = function () {
165165
};
166166
```
167167

168+
### **C++**
169+
170+
```cpp
171+
class MedianFinder {
172+
public:
173+
/** initialize your data structure here. */
174+
MedianFinder() {
175+
}
176+
177+
void addNum(int num) {
178+
if (maxHeap.size() == minHeap.size()) {
179+
maxHeap.push(num);
180+
int temp = maxHeap.top();
181+
maxHeap.pop();
182+
minHeap.push(temp);
183+
} else {
184+
minHeap.push(num);
185+
int temp = minHeap.top();
186+
minHeap.pop();
187+
maxHeap.push(temp);
188+
}
189+
}
190+
191+
double findMedian() {
192+
if (maxHeap.size() == minHeap.size()) {
193+
return (maxHeap.top() + minHeap.top()) / 2.0;
194+
}
195+
return minHeap.top();
196+
}
197+
198+
private:
199+
priority_queue<int> maxHeap;
200+
priority_queue<int, vector<int>, greater<int>> minHeap;
201+
202+
};
203+
```
204+
168205
### **...**
169206

170207
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
class MedianFinder {
2+
public:
3+
/** initialize your data structure here. */
4+
MedianFinder() {
5+
}
6+
7+
void addNum(int num) {
8+
if (maxHeap.size() == minHeap.size()) {
9+
maxHeap.push(num);
10+
int temp = maxHeap.top();
11+
maxHeap.pop();
12+
minHeap.push(temp);
13+
} else {
14+
minHeap.push(num);
15+
int temp = minHeap.top();
16+
minHeap.pop();
17+
maxHeap.push(temp);
18+
}
19+
}
20+
21+
double findMedian() {
22+
if (maxHeap.size() == minHeap.size()) {
23+
return (maxHeap.top() + minHeap.top()) / 2.0;
24+
}
25+
return minHeap.top();
26+
}
27+
28+
private:
29+
priority_queue<int> maxHeap;
30+
priority_queue<int, vector<int>, greater<int>> minHeap;
31+
32+
};

lcof/面试题43. 1~n整数中1出现的次数/README.md

+29
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,35 @@ var countDigitOne = function (n) {
119119
};
120120
```
121121

122+
### **C++**
123+
124+
```cpp
125+
class Solution {
126+
public:
127+
int countDigitOne(int n) {
128+
long long digit = 1;
129+
int count = 0;
130+
int high = n / 10;
131+
int cur = n % 10;
132+
int low = 0;
133+
while (high != 0 || cur != 0) {
134+
if (cur == 0) {
135+
count += high * digit;
136+
} else if (cur == 1) {
137+
count += high * digit + low + 1;
138+
} else {
139+
count += (high + 1) * digit;
140+
}
141+
low += cur * digit;
142+
cur = high % 10;
143+
high /= 10;
144+
digit *= 10;
145+
}
146+
return count;
147+
}
148+
};
149+
```
150+
122151
### **...**
123152
124153
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
class Solution {
2+
public:
3+
int countDigitOne(int n) {
4+
long long digit = 1;
5+
int count = 0;
6+
int high = n / 10;
7+
int cur = n % 10;
8+
int low = 0;
9+
while (high != 0 || cur != 0) {
10+
if (cur == 0) {
11+
count += high * digit;
12+
} else if (cur == 1) {
13+
count += high * digit + low + 1;
14+
} else {
15+
count += (high + 1) * digit;
16+
}
17+
low += cur * digit;
18+
cur = high % 10;
19+
high /= 10;
20+
digit *= 10;
21+
}
22+
return count;
23+
}
24+
};

lcof/面试题45. 把数组排成最小的数/README.md

+23
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,29 @@ var minNumber = function (nums) {
9393
};
9494
```
9595

96+
### **C++**
97+
98+
```cpp
99+
class Solution {
100+
public:
101+
string minNumber(vector<int>& nums) {
102+
int n = nums.size();
103+
vector<string> strs(n);
104+
for (int i = 0; i < n; ++i) {
105+
strs[i] = to_string(nums[i]);
106+
}
107+
sort(strs.begin(), strs.end(), [](const string& s1, const string& s2) {
108+
return s1 + s2 < s2 + s1;
109+
});
110+
string ans;
111+
for (int i = 0; i < n; ++i) {
112+
ans += strs[i];
113+
}
114+
return ans;
115+
}
116+
};
117+
```
118+
96119
### **...**
97120
98121
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
class Solution {
2+
public:
3+
string minNumber(vector<int>& nums) {
4+
int n = nums.size();
5+
vector<string> strs(n);
6+
for (int i = 0; i < n; ++i) {
7+
strs[i] = to_string(nums[i]);
8+
}
9+
sort(strs.begin(), strs.end(), [](const string& s1, const string& s2) {
10+
return s1 + s2 < s2 + s1;
11+
});
12+
string ans;
13+
for (int i = 0; i < n; ++i) {
14+
ans += strs[i];
15+
}
16+
return ans;
17+
}
18+
};

0 commit comments

Comments
 (0)