LeetCode | 206. 反转链表
我的Bilibili频道:香芋派Taro我的个人博客:taropie0224.github.io(阅读体验更佳)我的公众号:香芋派的烘焙坊我的音频技术交流群:1136403177我的个人微信:JazzyTaroPie
https://leetcode.cn/problems/reverse-linked-list/
题解123456789101112131415//迭代class Solution {public: ListNode* reverseList(ListNode* head) { ListNode* prev = nullptr; ListNode* curr = head; while (curr) { ListNode* next = curr->next; curr->next = prev; prev = curr; curr = next; } ...
LeetCode | 215. 数组中第K个最大元素
我的Bilibili频道:香芋派Taro我的个人博客:taropie0224.github.io(阅读体验更佳)我的公众号:香芋派的烘焙坊我的音频技术交流群:1136403177我的个人微信:JazzyTaroPie
https://leetcode.cn/problems/kth-largest-element-in-an-array/
题解1234567class Solution {public: int findKthLargest(vector<int>& nums, int k) { sort(nums.begin(), nums.end()); return nums[nums.size() - k]; }};
思路上一题做的217,所以直接开摆了,一个排序解决。
但是不推荐这么做,可以点链接进去看一下题解。
LeetCode | 217. 存在重复元素
我的Bilibili频道:香芋派Taro我的个人博客:taropie0224.github.io(阅读体验更佳)我的公众号:香芋派的烘焙坊我的音频技术交流群:1136403177我的个人微信:JazzyTaroPie
https://leetcode.cn/problems/contains-duplicate/
题解12345678910class Solution {public: bool containsDuplicate(vector<int>& nums) { sort(nums.begin(), nums.end()); for (int i = 0; i < nums.size() - 1; i++) { if (nums[i] == nums[i+1]) return true; } return false; }};
思路首先排序,从左至右依次两两比较,如果有相等的,那么返回true,全 ...
LeetCode | 237. 删除链表中的节点
我的Bilibili频道:香芋派Taro我的个人博客:taropie0224.github.io(阅读体验更佳)我的公众号:香芋派的烘焙坊我的音频技术交流群:1136403177我的个人微信:JazzyTaroPie
https://leetcode.cn/problems/power-of-two/solution/2de-mi-by-leetcode-solution-rny3/
题解1234567891011class Solution {public: bool isPowerOfTwo(int n) { if (n < 1) return false; while (n != 1){ if (n % 2 == 1) return false; n = n / 2; } return true; }};
思路拿到一个数摁除2,如果哪一次余数为1了,那就false,如果一路除到1了,那就ture
这 ...
LeetCode | 237. 删除链表中的节点
我的Bilibili频道:香芋派Taro我的个人博客:taropie0224.github.io(阅读体验更佳)我的公众号:香芋派的烘焙坊我的音频技术交流群:1136403177我的个人微信:JazzyTaroPie
https://leetcode.cn/problems/delete-node-in-a-linked-list/
题解1234567class Solution {public: void deleteNode(ListNode* node) { node->val = node->next->val; node->next = node->next->next; }};
思路最头痛的肯定是链表这个东西是不能访问之前的节点的,但是我们可以通过修改值来实现类似的效果
假如有链表1 -> 2 -> 3 -> 4,我们要删除其中的2节点
我们可以先将2改为3,变成1 -> 3 -> 3 -> 4
然后跳过原来的3,直接 ...
LeetCode | 238. 除自身以外数组的乘积
我的Bilibili频道:香芋派Taro我的个人博客:taropie0224.github.io(阅读体验更佳)我的公众号:香芋派的烘焙坊我的音频技术交流群:1136403177我的个人微信:JazzyTaroPie
https://leetcode.cn/problems/product-of-array-except-self/
题解and思路12345678910111213141516171819202122232425262728293031class Solution {public: vector<int> productExceptSelf(vector<int>& nums) { int length = nums.size(); // L 和 R 分别表示左右两侧的乘积列表 vector<int> L(length), R(length, 0); vector<int> answer(length); // L[ ...
LeetCode | 292. Nim游戏
我的Bilibili频道:香芋派Taro我的个人博客:taropie0224.github.io(阅读体验更佳)我的公众号:香芋派的烘焙坊我的音频技术交流群:1136403177我的个人微信:JazzyTaroPie
https://leetcode.cn/problems/nim-game/
题解and思路123456class Solution {public: bool canWinNim(int n) { return n % 4 != 0; }};
很有意思的推理题,必须避免轮到你时石头是4的倍数,如果开局就是4的倍数,那么直接寄,如果不是,那么拿掉1~3块石头让剩下的石头为4的倍数就行。
但是我感觉面试不会考这种题…(说实话我第一眼想到的也是DP)
LeetCode | 344. 反转字符串
我的Bilibili频道:香芋派Taro我的个人博客:taropie0224.github.io(阅读体验更佳)我的公众号:香芋派的烘焙坊我的音频技术交流群:1136403177我的个人微信:JazzyTaroPie
https://leetcode.cn/problems/reverse-string/
题解and思路123456789class Solution {public: void reverseString(vector<char>& s) { int n = s.size(); for (int left = 0, right = n - 1; left < right; left++, right--) { swap(s[left], s[right]); } }};
送分题,双指针中间逼近,swap
无题
unique_ptr使用make_unique创建一个unique_ptr:
1unique_ptr<int>unPtr1 = make_unique<int>(25);
此时若运行:
1cout << unPtr1 << endl;
会输出指针所指向内存的地址,所以如果我们想输出它的值(25)的话,就要运行:
1cout << *unPtr1 << endl;
unique_ptr不能共享如果这么写会报错:
12unique_ptr<int>unPtr1 = make_unique<int>(25);unique_ptr<int>unPtr2 = nPtr1;
唯一能做的就是更改内存地址的所有权,比如把所有权从unPtr1修改为unPtr2
1unique_ptr<int>unPtr2 = move(unPtr1);
此时运行:
1cout << *unPtr2 << endl;
会输出25
此时之前的指针unPtr1就会变成 ...
LeetCode | 16. 最接近的三数之和
我的Bilibili频道:香芋派Taro我的个人博客:taropie0224.github.io(阅读体验更佳)我的公众号:香芋派的烘焙坊我的音频技术交流群:1136403177我的个人微信:JazzyTaroPie
https://leetcode.cn/problems/3sum-closest/
题解and思路12345678910111213141516171819202122232425class Solution {public: int threeSumClosest(vector<int>& nums, int target) { sort(nums.begin(), nums.end()); //首先排序 int ans = nums[0] + nums[1] + nums[2]; //初始化ans为前三个数之和 //进入循环,边界条件为nums的长度 for(int i = 0; i < nums.size(); i++) { ...