Compare commits
2 Commits
it-writing
...
leetcode-2
| Author | SHA1 | Date | |
|---|---|---|---|
|
f36e14ddf1
|
|||
|
d7cb7e1193
|
@@ -16,8 +16,7 @@
|
||||
<body>
|
||||
<div class="reveal">
|
||||
<div class="slides">
|
||||
<section>Slide 1</section>
|
||||
<section>Slide 2</section>
|
||||
<section data-markdown="leetcode-20230110.md"></section>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -30,6 +29,8 @@
|
||||
// - https://revealjs.com/initialization/
|
||||
// - https://revealjs.com/config/
|
||||
Reveal.initialize({
|
||||
width: 1000,
|
||||
height: 1000,
|
||||
hash: true,
|
||||
|
||||
// Learn about plugins: https://revealjs.com/plugins/
|
||||
|
||||
147
leetcode-20230110.md
Normal file
147
leetcode-20230110.md
Normal file
@@ -0,0 +1,147 @@
|
||||
# Leetcode 💻 寒假 20230110
|
||||
|
||||
---
|
||||
|
||||
### 179. Largest Number
|
||||
|
||||
给定一个非负整数列表 nums,将它们排列成最大的数并返回。
|
||||
|
||||
```cpp [|4-6|7-9|10-11|13]
|
||||
class Solution {
|
||||
public:
|
||||
string largestNumber(vector<int>& nums) {
|
||||
vector<string> v;
|
||||
v.reserve(nums.size());
|
||||
for (auto const &i : nums) v.push_back(to_string(i));
|
||||
sort(v.begin(), v.end(), [](string &a, string &b) {
|
||||
return a + b > b + a;
|
||||
});
|
||||
string ret;
|
||||
for (auto const &s : v) ret += s;
|
||||
// 处理 ["0", "0", "0"] 的情况
|
||||
return ret.startswith('0') ? "0" : ret;
|
||||
}
|
||||
};
|
||||
```
|
||||
|
||||
Note:
|
||||
|
||||
```python
|
||||
'1' + '3' < '2' # True
|
||||
'1' + '3' < '22' # True
|
||||
'1' < '11' # True
|
||||
'1' + '0' == '10' # True
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 179. Largest Number
|
||||
|
||||
Python 版本
|
||||
|
||||
```python [|4|5-7|8]
|
||||
from functools import cmp_to_key
|
||||
class Solution:
|
||||
def largestNumber(self, nums: List[int]) -> str:
|
||||
strs = [str(i) for i in nums]
|
||||
strs.sort(key = cmp_to_key(
|
||||
lambda a, b: -1 if a + b > b + a else 1
|
||||
))
|
||||
return '0' if strs[0] == '0' else ''.join(strs)
|
||||
```
|
||||
|
||||
Note:
|
||||
|
||||
思路和刚刚的 c++ 是一样的,但我主要想给各位介绍一下python的写法,
|
||||
因为我看群里用python的人还是不少的,当然这种写法是好是坏见仁见智了,我个人认为是比较好的。
|
||||
|
||||
4 首先我们用这个列表生成式将nums转为字符串strs, strs 是一个列表,列表中的每个元素是str(i),i是遍历nums得到的变量。
|
||||
|
||||
5-7 接着对strs进行排序,这个cmp to key 是python3的设计,他把一个比较用来比较大小的函数变成key函数,
|
||||
这个比较函数做什么呢,他输入两个变量,如果a+b比b+a大,则这个比较函数返回-1,否则返回1,注意这里a和b的类型
|
||||
都是字符串,a+b表示的是字符串a和字符串b拼接之后的结果
|
||||
|
||||
8 最后用一个三元表达式返回结果,和上面c++的思路是一样的,
|
||||
注意这又有一个python好用的方法,字符串.join,后面跟一个数组,
|
||||
意思是把这个数组用空字符串拼接起来
|
||||
|
||||
---
|
||||
|
||||
### 347. Top K Frequent Element
|
||||
|
||||
```cpp [|4-6|8-13|15-19|21-28]
|
||||
class Solution {
|
||||
public:
|
||||
vector<int> topKFrequent(vector<int>& nums, int k) {
|
||||
unordered_map<int, int> count;
|
||||
for (auto const &n : nums)
|
||||
count[n]++;
|
||||
|
||||
// 将 map 转为列表
|
||||
// [(0, 5), (1, 3), ... ]
|
||||
// 代表数字 0 出现 5 次,数字 1 出现 3 次
|
||||
vector<pair<int, int>> tmp;
|
||||
for (auto const &pair : count)
|
||||
tmp.push_back(pair);
|
||||
|
||||
sort(tmp.begin(), tmp.end(), [](
|
||||
const pair<int, int> &a,
|
||||
const pair<int, int> &b) {
|
||||
return a.second > b.second;
|
||||
});
|
||||
|
||||
vector<int> ret;
|
||||
for (auto const &pair : tmp) {
|
||||
if (ret.size() >= k)
|
||||
break;
|
||||
ret.push_back(pair.first);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
};
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 347. Top K Frequent Element
|
||||
|
||||
Python 版本
|
||||
|
||||
```python [4-5]
|
||||
import collections
|
||||
class Solution:
|
||||
def topKFrequent(self, nums: List[int], k: int) -> List[int]:
|
||||
count = collections.Counter(nums).most_common(k)
|
||||
return [i[0] for i in count]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 75. Sort Colors
|
||||
|
||||
C++
|
||||
|
||||
```cpp [|2-5|6|7-11|12-14|15-18]
|
||||
void sortColors(vector<int> &nums) {
|
||||
auto low = nums.begin();
|
||||
auto high = nums.end() - 1;
|
||||
|
||||
for (auto mid = nums.begin(); mid <= high;) {
|
||||
switch (*mid) {
|
||||
case 0:
|
||||
swap(*mid, *low);
|
||||
mid++;
|
||||
low++;
|
||||
break;
|
||||
case 1:
|
||||
mid++;
|
||||
break;
|
||||
case 2:
|
||||
swap(*mid, *high);
|
||||
high--;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
Reference in New Issue
Block a user