随笔分类 - 刷题笔记
摘要:bool wordBreak(string s, vector<string>& wordDict) { std::unordered_set<std::string> wordSet; for(auto& it : wordDict) { wordSet.insert(it); } int sz
阅读全文
摘要:思路 注意这里隐含了这样情况,就是这个字符串中的数字要使用完 class Solution { public: int S_COUNT = 4; std::vector<std::string> ans; std::vector<int> segment; void dfs(int segid, i
阅读全文
摘要:思路 对于两个长度为n和m的长度字符串,两个数相乘的最大位数为n+m, 最小位数为0. 所以可以用n+m的vector表示。 计算时从低位开始,对应vector中就是从n-1和m-1开始,直到i与j为0; 计算结果应该放在res[i+j+1]的位置。 经历一次O(n*m)循环后。 将每个位置的进位,
阅读全文
摘要:思路 用栈存储没有匹配的符号 bool isValid(string s) { std::stack<char> stk; int sz = s.size(); for (int i = 0; i < sz; ++i) { if (s[i] == '(' || s[i] == '[' || s[i]
阅读全文
摘要:思路 动态规划 使用dp[i][j]表示以j为起点,i为终点的字符串是否是回文子串 string longestPalindrome(string s) { int sz = s.size(); bool dp[sz][sz]; int max_len = 0; int l = 0; int r =
阅读全文
摘要:思路 1、拓扑排序加广度优先遍历 vector<int> findOrder(int numCourses, vector<vector<int>>& prerequisites) { std::unordered_map<int, std::vector<int>> map; // 字典用于记录某
阅读全文
摘要:int maxProfit(vector<int>& prices) { int sz = prices.size(); if (0 == sz) return 0; int min_idx = 0; int max_val = 0; for (int i = 1; i < sz; ++i) { i
阅读全文
posted @ 2021-07-13 11:34
cyssmile
摘要:思路 1、记录每个站上下车的查分(包括两部分,上车和下车) 2、初始站,车上人数为0,然后每个站判断加上当前站的差分,车上人数是否大于容量。 注意 为了保证按顺序过站,这里不能使用unordered_map,而要使用普通的map(带顺序)。 bool carPooling(vector<vector
阅读全文
摘要:思路 先计算前缀中pre奇数个数。 利用map存储,pre[i]的个数, 查找时是由pre[i]-k int numberOfSubarrays(vector<int>& nums, int k) { int sz = nums.size(); if (0 == sz) return 0; std:
阅读全文
posted @ 2021-07-13 10:21
cyssmile
摘要:思路 暴力破解就不记录了,主要是前缀和加map的思路. 用map记录pre前缀和出现的次数。开始时前缀和为0,出现1次。 所以map[0] = 1; 如果之前已经出现过,那么map[pre] += 1; 遍历时,每次使用pre-k查询map,是否出现,如果出现cout += map[pre - k]
阅读全文
posted @ 2021-07-12 20:17
cyssmile
摘要:思路 记录左右的和 int pivotIndex(vector<int>& nums) { int sz = nums.size(); if (0 == sz) return -1; std::vector<int> left; std::vector<int> right; left.resize
阅读全文
posted @ 2021-07-12 11:42
cyssmile
摘要:思路1 dfs void dfs(int i, vector<bool>& visited, vector<vector<int>>& arr, int& count) { if(!visited[i]) { visited[i] = true; for (int j = 0; j < arr.si
阅读全文
posted @ 2021-07-12 11:23
cyssmile
摘要:思路1 dfs (1)遇到为‘1’的情况,将num_island+1,然后将与之相邻的全部置为1。 (2)遍历(1)过程。 void dfs(vector<vector<char>>& grid, int x, int y, int n, int m) { if (x < n && y < m &&
阅读全文
posted @ 2021-07-12 11:16
cyssmile
摘要:思路1. int的最大值表示范围在2^19 < 2147483647 < 2^20之间, 那么只需要保证n>0且2^19 % 2^x == 0即可。 bool isPowerOfThree(int n) { int val = std::pow(3, 19); return (n > 0) && (
阅读全文
摘要:思路 1、设置一个左下标指针l,开始时指向下标0; 2、设置剩余可将0转换为1的个数,初始值为k; 3、变量数组中元素,如果nums[i] == 1,那么继续右移动; 如果nums[i] == 0,分两种情况(1)surplus > 1,即是可以将0变为1,那么i继续右移,surplus--; (2
阅读全文

浙公网安备 33010602011771号