mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-06 23:28:29 +08:00
Update
This commit is contained in:
47
problems/0021.合并两个有序链表.md
Normal file
47
problems/0021.合并两个有序链表.md
Normal file
@ -0,0 +1,47 @@
|
||||
|
||||
|
||||
```
|
||||
/**
|
||||
* Definition for singly-linked list.
|
||||
* struct ListNode {
|
||||
* int val;
|
||||
* ListNode *next;
|
||||
* ListNode() : val(0), next(nullptr) {}
|
||||
* ListNode(int x) : val(x), next(nullptr) {}
|
||||
* ListNode(int x, ListNode *next) : val(x), next(next) {}
|
||||
* };
|
||||
*/
|
||||
// 内存消耗比较大,尝试一下 使用题目中的链表
|
||||
class Solution {
|
||||
public:
|
||||
// 题目中我们为什么定义了一个 新的head
|
||||
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
|
||||
ListNode* head = new ListNode();
|
||||
ListNode* index = head;
|
||||
while(l1 != nullptr && l2 != nullptr) { // 注意null 和nullptr的区别
|
||||
if (l1->val < l2->val) {
|
||||
index->next = l1;
|
||||
l1 = l1->next;
|
||||
} else {
|
||||
index->next = l2;
|
||||
l2 = l2->next;
|
||||
}
|
||||
index = index->next;
|
||||
}
|
||||
if (l1 != nullptr) {
|
||||
index->next = l1;
|
||||
l1 = l1->next;
|
||||
}
|
||||
if (l2 != nullptr) {
|
||||
index->next = l2;
|
||||
l2 = l2->next;
|
||||
}
|
||||
ListNode* tmp = head; // 注意清理内存,不清理也没事
|
||||
head = head->next;
|
||||
delete tmp;
|
||||
return head;
|
||||
// return head->next
|
||||
|
||||
}
|
||||
};
|
||||
```
|
@ -1,4 +1,3 @@
|
||||
|
||||
## 题目地址
|
||||
|
||||
https://leetcode-cn.com/problems/search-insert-position/
|
||||
|
@ -28,10 +28,10 @@ public:
|
||||
vector<vector<int>> generateMatrix(int n) {
|
||||
vector<vector<int>> res(n, vector<int>(n, 0)); // 使用vector定义一个二维数组
|
||||
int startx = 0, starty = 0; // 定义每循环一个圈的起始位置
|
||||
int loop = n / 2; // 每个圈循环几次
|
||||
int mid = n / 2; // 矩阵中间的位置,例如:n为3, 中间的位置就是(1,1),n为5,中间位置为(3, 3)
|
||||
int count = 1; // 用来计数
|
||||
int offset = 1; // 每一圈循环,需要偏移的位置
|
||||
int loop = n / 2; // 每个圈循环几次,例如n为奇数3,那么loop = 1 只是循环一圈,矩阵中间的值需要单独处理
|
||||
int mid = n / 2; // 矩阵中间的位置,例如:n为3, 中间的位置就是(1,1),n为5,中间位置为(2, 2)
|
||||
int count = 1; // 用来给矩阵中每一个空格赋值
|
||||
int offset = 1; // 每一圈循环,需要控制每一条边遍历的长度
|
||||
int i,j;
|
||||
while (loop --) {
|
||||
i = startx;
|
||||
@ -59,7 +59,7 @@ public:
|
||||
startx++;
|
||||
starty++;
|
||||
|
||||
// offset 控制每一圈,遍历的长度
|
||||
// offset 控制每一圈里每一条边遍历的长度
|
||||
offset += 2;
|
||||
}
|
||||
|
||||
|
21
problems/0237.删除链表中的节点.md
Normal file
21
problems/0237.删除链表中的节点.md
Normal file
@ -0,0 +1,21 @@
|
||||
|
||||
## 题目地址
|
||||
https://leetcode-cn.com/problems/delete-node-in-a-linked-list/
|
||||
|
||||
## 思路
|
||||
|
||||
题目中已经说了是非末尾节点,所以不用对末尾节点的情况经行判断
|
||||
|
||||
**链表中所有节点的值都是唯一的。** 题目题意强调这一点,是为什么,因为 我们删除的node在内存地址 删除的并不是这个。
|
||||
## 代码
|
||||
|
||||
```
|
||||
class Solution {
|
||||
public:
|
||||
void deleteNode(ListNode* node) {
|
||||
node->val = node->next->val;// 将前一个值赋给当前node
|
||||
node->next = node->next->next; // 将当前node的next 指向下下node
|
||||
}
|
||||
};
|
||||
```
|
||||
|
@ -21,13 +21,13 @@ public:
|
||||
bool canConstruct(string ransomNote, string magazine) {
|
||||
for (int i = 0; i < magazine.length(); i++) {
|
||||
for (int j = 0; j < ransomNote.length(); j++) {
|
||||
if (magazine[i] == ransomNote[j]) {
|
||||
ransomNote.erase(ransomNote.begin() + j);
|
||||
if (magazine[i] == ransomNote[j]) { // 在ransomNote中找到和magazine相同的字符
|
||||
ransomNote.erase(ransomNote.begin() + j); // ransomNote删除这个字符
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (ransomNote.length() == 0) {
|
||||
if (ransomNote.length() == 0) { // 如果ransomNote为空,则说明magazine的字符可以组成ransomNote
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@ -39,7 +39,7 @@ public:
|
||||
|
||||
我们想一想优化解法
|
||||
|
||||
## 优化解法
|
||||
## 字典计数法(哈希策略)
|
||||
|
||||
因为题目所只有小写字母,那我们可以采用空间换区时间的哈希策略, 用一个长度为26的数组还记录magazine里字母出现的次数,然后再用ransomNote去验证这个数组是否包含了ransomNote所需要的所有字母。
|
||||
代码如下:
|
||||
@ -52,11 +52,11 @@ public:
|
||||
bool canConstruct(string ransomNote, string magazine) {
|
||||
int record[26] = {0};
|
||||
for (int i = 0; i < magazine.length(); i++) {
|
||||
record[magazine[i]-'a'] ++;
|
||||
record[magazine[i]-'a'] ++; // 通过recode数据记录 magazine里各个字符出现次数
|
||||
}
|
||||
for (int j = 0; j < ransomNote.length(); j++) {
|
||||
record[ransomNote[j]-'a']--;
|
||||
if(record[ransomNote[j]-'a'] < 0) {
|
||||
record[ransomNote[j]-'a']--; // 遍历ransomNote,在record里对应的字符个数做--操作
|
||||
if(record[ransomNote[j]-'a'] < 0) { // 如果小于零说明 magazine里出现的字符,ransomNote没有
|
||||
return false;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user