Leetcode算法题401-500


401-410

411-420

415. 字符串相加

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Solution {
public:
string addStrings(string num1, string num2) {
vector<int> A, B;
int k = 0;
string res = "";
for (int i = num1.size() - 1; i >= 0; i--) {
A.push_back(num1[i] - '0');
}
for (int i = num2.size() - 1; i >= 0; i--) {
B.push_back(num2[i] - '0');
}
for (int i = 0; i < A.size() || i < B.size(); i++) {
if (i < A.size()) k += A[i];
if (i < B.size()) k += B[i];
res += char(k % 10 + '0');
k /= 10;
}
if (k) res += char('1');
reverse(res.begin(), res.end());
return res;
}
};

421-430

431-440

440. 字典序的第K小数字

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
29
30
31
32
class Solution {
public:
int getCnt(int prefix, int n) {
long long p = 1;
auto A = to_string(n), B = to_string(prefix);
int dt = A.size() - B.size();
int res = 0;
for (int i = 0; i < dt; ++i) {
res += p;
p *= 10;
}
A = A.substr(0, B.size());
if (A == B) res += n - prefix * p + 1;
else if (A > B) res += p;
return res;
}

int findKthNumber(int n, int k) {
int prefix = 1;
while (k > 1) {
int cnt = getCnt(prefix, n);
if (k > cnt) {
k -= cnt;
prefix++;
} else {
prefix *= 10;
--k;
}
}
return prefix;
}
};

441-450

451-460

461-470

461. 汉明距离

本题属于位运算的组合题。先使用异或的性质去除所有二进制不同位的位,再使用与计算二进制中1的个数。

1
2
3
4
5
6
7
8
9
10
11
12
class Solution {
public:
int hammingDistance(int x, int y) {
x ^= y;
int n = 0;
while (x) {
x &= (x - 1);
++n;
}
return n;
}
};

471-480

481-490

491-500

496. 下一个更大元素 I

本题本质上是一个单调栈的模板题,唯一不同的地方就是使用了两个vector存放数据,因此,在找到num2所有元素的下一个更大元素存入哈希表。再将num1中的元素通过哈希表查出对应的答案。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Solution {
public:
vector<int> nextGreaterElement(vector<int> &nums1, vector<int> &nums2) {
// key为nums2中的值,value为对应值下一个更大的元素
unordered_map<int, int> heap;
// 存放单调栈
int stack[1001], top = 0, x;
vector<int> res;
for (int i = nums2.size() - 1; i >= 0; i--) {
x = nums2[i];
while (top && stack[top] < x) --top;
if (top) heap[x] = stack[top];
else heap[x] = -1;
stack[++top] = x;
}
for (int item:nums1){
res.push_back(heap[item]);
}
return res;
}
};

文章作者: 不二
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 不二 !
  目录