代码随想录day7 || 哈希表2
454.四数相加II题目链接状态:一次过但耗时长思路:和两数加和思路一样
12345678910111213141516class Solution {public: int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) { unordered_map<int, int> mp; int res = 0; for (int i : nums1) for (int j : nums2) mp[-(i + j)]++; for (int i : nums3) for (int j : nums4) res += mp[i + j];// 如果 m ...
代码随想录day6 || 哈希表1
哈希表理论基础目的:快速判断一个元素是否出现集合里常见的三种哈希结构数组、set (集合)、map(映射)(偷懒直接截图了)
242.有效的字母异位词题目链接状态:两遍过错误原因:为考虑两字符串长度不同可直接返回false思路:之前在《904. 水果成篮》中学到的unordered_map可直接用
12345678910111213class Solution {public: bool isAnagram(string s, string t) { int m = s.size(), n = t.size(); if (m != n) return false;//第一次未考虑到 unordered_map<char, int> ans; for (int i = 0; i < m; i++) ans[s[i]]++; for (int j = 0; j < n; j++) if (--ans[t[j]] < 0) ...
代码随想录day4 || 链表2
24. 两两交换链表中的节点题目链接状态: 一遍过思路: 使用虚拟节点放在开头,注意盯住三个节点的变化即可
原始代码
1234567891011121314151617181920212223class Solution {public: ListNode* swapPairs(ListNode* head) { if (head == nullptr || head->next == nullptr) return head; ListNode* dummynode = new ListNode(0); dummynode->next = head; ListNode *cur = head->next, *pre = head, *h = dummynode; while (cur != nullptr) { pre->next = cur->next; cur->next = ...
代码随想录day3 || 链表
链表一、定义与方法使用结构体
123456// 单链表struct ListNode { int val; // 节点上存储的元素 ListNode *next; // 指向下一个节点的指针 ListNode(int x): val(x), next(NULL) {} // 节点的构造函数};
使用类
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778class LNode {public: int val; LNode *next; LNode(int x) : val(x), next(nullptr) {}};class LinkedList {private: LNode *head;public: ...
代码随想录day2 || 数组2
27. 移除元素题目链接状态:一遍过思路:直接遍历一遍,若不等则改变
12345678910class Solution {public: int removeElement(vector<int>& nums, int val) { int k = 0, n = nums.size(); for (int i = 0; i < n; i++) if (nums[i] != val) nums[k++] = nums[i]; return k; }};
小结:此方法为双指针法或快慢指针法
26. 删除有序数组中的重复项题目链接状态:有思路但错了很多次错误原因:下标范围错误,因为要考虑第一个元素的问题,判断错误
1234567891011121314151617class Solution {public: int removeDuplicates(vector<int>& nums ...
代码随想录day1 || 数组1
704. 二分查找题目链接
状态:一遍过思路:基本功
35. 搜索插入位置题目链接状态:有思路且三遍过思路:注意是升序,分两种情况:
数组中有该元素 = 二分查找
数组中没有该元素 = 查找失败后情况为: $left>right$ left向右超过right,说明nums[right]<target,right+1=left=n right向左超过left,说明位置在开头nums[left ]<target,right+1=left=n
答案思路:考虑所有情况:
// 分别处理如下四种情况 // 目标值在数组所有元素之前 [0, -1] // 目标值等于数组中某一个元素 return middle; // 目标值插入数组中的位置 [left, right],return right + 1 // 目标值在数组所有元素之后的情况 [left, right], 因为是右闭区间, 所以 return right + 1
暴力解法:
12345678910111213141516class ...