leetcode
single 君
求大佬carry
展开
-
runtime error: member access within null pointer of type ‘ListNode‘ (solution.cpp) SUMMARY: Undefine
指针如果为空的话,用cur->next就会报错,得在判断条件前加一个cur!就是说i>0,j>0这些条件得放在前面,可以提前规避。这个问题和图类问题判断边界时有异曲同工的地方。这样就不会有空指针问题。原创 2023-03-15 20:44:06 · 638 阅读 · 0 评论 -
leetcode hot100 4.寻找两个正序数组的中位数
代码原创 2022-08-18 22:42:22 · 1031 阅读 · 0 评论 -
算法模板:维护以xx结尾的子序列的数量
此类题目的一个比较通用的做法是维护以xx结尾的子序列的数量class Solution {public: long long f(string s,string x){ long long a=0,b=0,c=0; for(char i:s){ if(i==x[2])c+=b;//维护以字符串结尾的子序列的数量 if(i==x[1])b+=a;//维护以前两个字符结尾的子序列的数量 if(i.原创 2022-04-03 00:45:48 · 467 阅读 · 0 评论 -
第74场双周赛
第一次打双周赛。。第二题超时代码:class Solution {public: long long maximumSubsequenceCount(string text, string pattern) { vector<int>a; vector<int>b; for(int i=0;i<text.size();i++){ if(text[i]==pattern[0])a.push_b原创 2022-03-20 00:22:12 · 101 阅读 · 0 评论 -
数组中的第K大元素:快速选择和大根堆小根堆,库大根堆
听说这玩意儿是面试重点。。。比如快速选择:你不能说快排,说快排就寄,要用经过优化的快速选择算法:class Solution {public: int quickselect(vector<int>& nums, int l,int r,int ksmall){ //if(l=r)return nums[l]; int q=rand()%(r-l+1)+l; int key=nums[q]; swap(nums原创 2022-03-16 22:49:54 · 498 阅读 · 0 评论 -
剑指 Offer(第 2 版)30余道中等题知识点总结
花了几天时间把剑指 Offer的中等题刷完了。稍微总结一下:大概就这么些考点二叉树剑指 Offer 07. 重建二叉树:前序遍历和中序遍历的复习。map的应用,还有递归。剑指 Offer 26. 树的子结构:二叉树递归,一直比两棵树,到NULL为止。剑指 Offer 32 - III. 从上到下打印二叉树 III:BFS剑指 Offer 33. 二叉搜索树的后序遍历序列:DFS判断bool verify(vector<int>& postorder,int i,int j原创 2022-03-12 22:01:38 · 487 阅读 · 0 评论 -
剑指 Offer 49. 丑数
这题1690设置的真好,数组小了就溢出,大了就超时寄!class Solution {public: int nthUglyNumber(int n) { int res=1; int k=0; vector<bool>dp(100000000,false); for(int i=0;i<6;i++)dp[i]=true; for(int i=6;i<99999999;i++){ .原创 2022-03-11 17:17:07 · 284 阅读 · 0 评论 -
(三种方法)剑指 Offer 48. 最长不含重复字符的子字符串
第一遍暴力:class Solution {public: int lengthOfLongestSubstring(string s) { int maxlength=0; int length=1; for(int i=0;i<s.size();i++){ int k=i; length=1; while(k<s.size()-1&&s.subs原创 2022-03-10 22:21:55 · 146 阅读 · 0 评论 -
剑指 Offer 38. 字符串的排列
class Solution {public: vector<string>res; void print(string s,string a,int l){ if(a.size()==l){ //if(res.empty())res.push_back(a); /*for(int i=0;i<res.size();i++){ if(a==res[i])return; .原创 2022-03-09 17:50:20 · 140 阅读 · 0 评论 -
剑指offer 剪绳子
用的dpclass Solution {public: int cuttingRope(int n) { vector<int>dp(n+1,0); for(int i=2;i<n+1;i++)dp[i]=i; dp[2]=1; if(n==2)return dp[2]; dp[3]=2; //dp[4]=4; for(int i=4;i<n+1;i++){.原创 2022-03-06 20:02:31 · 127 阅读 · 0 评论 -
剑指offer:两种dfs的区别
这里dfs的话二维数组要剪枝(回溯)class Solution {public: bool dfs(vector<vector<char>>& board, int i,int j,string word,int a){ if(a==word.size()||i<0||i>board.size()-1||j<0||j>board[0].size()-1||word[a]!=board[i][j])return false.原创 2022-03-06 19:15:00 · 393 阅读 · 0 评论 -
面试题 08.14.布尔运算
状态定义:dp[i][j][result=0/1]表示第i到j个数字计算结果为result的方案数。状态转移:枚举区间分割点,根据分割点的情况讨论左右区间计算结果,方案数增量为左右方案数相乘。分割点为 '&':结果为0 有三种情况: 0 0, 0 1, 1 0dp[i][j][0] += dp[i][k - 1][0] * dp[k + 1][j][0] + dp[i][k - 1][0] * dp[k + 1][j][1] + dp[i][k - 1][1] * dp[k + 1][j原创 2022-03-02 23:17:35 · 152 阅读 · 0 评论 -
面试题 05.02. 二进制数转字符串
class Solution {public: string printBin(double num) { string ans="0."; while(num!=0){ num*=2; if(num>=1){ ans+="1"; num-=1; } else{ ans.原创 2022-01-28 20:17:42 · 395 阅读 · 0 评论 -
面试题 08.10. 颜色填充
class Solution {public: void dfs(vector<vector<int>>& image,int sr, int sc, int newColor,int oldColor){ if(sr < 0 || sr >= image.size() || sc < 0 || sc >= image[sr].size() || image[sr][sc] != oldColor){ .原创 2022-01-24 21:56:39 · 201 阅读 · 0 评论 -
面试题 08.09. 括号
知识点:string删除最后一个元素也可以用pop_back()来实现还有就是这一段得写在if内,当时sb了思考了一下才明白233class Solution {public: vector<string>res; void gene(int n,int lc,int rc,string s){ if(lc==rc&&lc==n)res.push_back(s); if(lc<n){ s.app.原创 2022-01-24 00:03:58 · 128 阅读 · 0 评论 -
面试题 08.05. 递归乘法
class Solution {public: int multiply(int A, int B) { if(A==1)return B; if(A>B)swap(A,B); int b=B; for(int i=1;i<A;i++) {B=B+b;} return B; }};不知道该说啥。。。原创 2022-01-22 23:10:51 · 60 阅读 · 0 评论 -
面试题 08.04. 幂集
class Solution {public: vector<vector<int>> ans; void subset(vector<int>& nums,int count,int n,vector<int>res){ if(count==n){ ans.push_back(res); return; } subset(nums,co.原创 2022-01-22 23:02:24 · 254 阅读 · 0 评论 -
面试题 08.01. 三步问题
额,本来写的是迭代的,结果秒超时,很难绷得住。。class Solution {public: int waysToStep(int n) { if(n==1)return 1; if(n==2)return 2; if(n==3)return 4; if(n>=4)return (waysToStep(n-1)%1000000007+waysToStep(n-2)%1000000007+waysToStep(n-3)%10.原创 2022-01-22 22:06:22 · 298 阅读 · 0 评论 -
面试题 05.08. 绘制直线(含翻译)
题目晦涩难懂,提供翻译:length 表示一共有多少个int,w/32表示一行有多少int,length/(w/32)表示一共有多少行,y表示我们对第几行操作。x1是起始点,x2是结束点。我们只需要把第y行的x1到x2的0置为1,把每个int的值按顺序加入数组。这题的意思就是把一个二维数组展开,按行拼成一个一维数组,例如:对于一个二维数组[[1,2],[3,4]]->展开后变成[1,2,3,4]。原来二维数组中的一行的元素个数为w/32w / 32w/32, 二维矩阵所有元素个数是length.原创 2022-01-22 21:36:54 · 589 阅读 · 0 评论 -
面试题 03.03. 堆盘子(含vector多个知识点)
解题思路用vector嵌套stack模拟题意。需要特别注意的就是cap为0的情况,此时无法存任何数据,所有函数直接返回结果Warnning:int popAt(int index) { if(capacity==0||stk[index].empty() || index >= stk.size())return -1;这一段的逻辑条件看似没问题,实际上先后顺序错了,index>=那个条件只能放在第二个,不然会出问题,当index>=stk.size()时,s.原创 2022-01-22 19:44:40 · 601 阅读 · 0 评论 -
面试题 02.05. 链表求和(含未解决问题)
我真的是服了,尽给我搞这些,这代码明明差不多了/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode* addTwoNumbers(ListNode* l1, ListN.原创 2022-01-21 02:06:23 · 399 阅读 · 0 评论 -
面试题 02.03. 删除中间节点
class Solution {public: void deleteNode(ListNode* node) { node->val=node->next->val; node->next=node->next->next; }};原创 2022-01-21 00:00:33 · 288 阅读 · 0 评论 -
面试题 01.08. 零矩阵
class Solution {public: void setZeroes(vector<vector<int>>& matrix) { int m=matrix.size(); int n=matrix[0].size(); vector<int>row(m,0); vector<int>line(n,0);//这里成flag用了233 for(int i=.原创 2022-01-20 23:42:23 · 310 阅读 · 0 评论 -
面试题 01.07. 旋转矩阵
旋转矩阵法:class Solution {public: void rotate(vector<vector<int>>& matrix) { int n = matrix.size(); for (int i = 0; i < n / 2; i++) { for (int j = 0; j < (n + 1) / 2; j++) { int temp=matr.原创 2022-01-20 19:07:50 · 263 阅读 · 0 评论 -
面试题 01.04. 回文排列
这里注意hash表的使用,因为回文串不仅限于字母可能会有问题,哈希表很方便。class Solution {public: bool canPermutePalindrome(string s) { unordered_map<char,int>dic;//定义一个哈希表; for(char c:s){ dic[c]++; } int odd=0; for(auto kv:dic.原创 2022-01-20 17:46:05 · 311 阅读 · 0 评论 -
面试题 05.04. 下一个数
class Solution {public: vector<int> findClosedNumbers(int num) { bitset<32> smaller(num);//初始化bitset对象 bitset<32> bigger(num); int s=-1; for(int i=1;i<31;i++){//bigger要保证正数,最高符号位保证为0,最大正数为214748364.原创 2022-01-20 17:02:13 · 1723 阅读 · 0 评论 -
面试题 05.07. 配对交换
class Solution {public: int exchangeBits(int num) { int odd=num&0x55555555; int even=num&=0xaaaaaaaa; return (odd<<1)+(even>>1); }};原创 2022-01-20 02:13:10 · 244 阅读 · 0 评论 -
面试题 05.06. 整数转换
class Solution {public: int convertInteger(int A, int B) { unsigned int n=A^B;//如果A,B每一位都不同,如 01010101... 和 10101010...,这样异或结果为32个1。 此时 x - 1会超过 INT_MIN,所以必须将x设置为无符号整数。 while(n>0){ if(n%2==1)nums++; n=n/2; .原创 2022-01-19 00:48:42 · 139 阅读 · 0 评论 -
面试题 05.01. 插入
把2进制某一位变为1或0的位运算方法将第i位变为1:n=n|(1<<i) 将1向左移i位与原数按位或,原数其他位不发生变化,第i位变为1将第i位变为0:n=n&~(1<<i) 将1向左移i位取反后与原数按位与,取反后第i位是0,其他位是1,按位与原数其他位不变,第i位变为0class Solution {public: int insertBits(int N, int M, int i, int j) { for(int a=i;a<原创 2022-01-19 00:28:49 · 274 阅读 · 0 评论 -
面试题 04.08. 首个共同祖先
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: TreeNode*res; bool dfs(Tre.原创 2022-01-18 23:49:40 · 153 阅读 · 0 评论 -
面试题 04.06. 后继者
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: TreeNode* inorderSuccessor(Tre.原创 2022-01-18 23:12:18 · 52 阅读 · 0 评论 -
面试题 04.05. 合法二叉搜索树
这道题思路很简单嘛,就是递归,只要一个结点没有满足大于左子结点和小于右子结点就false有一些细节值得注意:一是不能写root->right->val,草,这样的话我们只能在递归函数里多加两个变量了。。二是这玩意儿需要long变量(因为它实例有很大的)三是root==NULL时,跑了12ms,而为nullptr时只跑了4ms,就离谱。。/** * Definition for a binary tree node. * struct TreeNode { * int.原创 2022-01-18 03:21:31 · 49 阅读 · 0 评论 -
面试题 04.03. 特定深度节点链表
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; *//** * Definition for singly-linked list. * struct ListNod.原创 2022-01-14 23:04:18 · 147 阅读 · 0 评论 -
面试题 04.02. 最小高度树
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: TreeNode* dfs(vector<int>.原创 2022-01-14 22:21:00 · 87 阅读 · 0 评论 -
面试题 03.05. 栈排序
通过辅助栈的来回装,使得主栈一直是一个排好序的状态。class SortedStack {public: stack<int>sortedstack={}; stack<int>temp={}; SortedStack() { //temp.push(1); } void push(int val) { //temp.push(sortedstack.top()); while(!s原创 2022-01-13 23:11:25 · 70 阅读 · 0 评论 -
面试题 03.01. 三合一(三个栈用一个数组来表示
网友热评:说唱学院出的题整个题目就第一句有用,示例为我们提出,有三个stack,分别为stack0.stack1,stack2。所以这个简单题就是一个函数三个步骤呗。复习了一下stack的库函数,top(),size(),empty();看起来很容易其实记多了容易混淆,一些细节会失真写了不过几分钟,调了十几分钟,草。class TripleInOne {public: stack<int>stack0; stack<int>stack1;原创 2022-01-13 21:40:52 · 106 阅读 · 0 评论 -
程序员面试金典03.04. 化栈为队
主要就是数据在两个栈里倒来倒去。class MyQueue {public: stack<int>xstack; stack<int>reversestack; /** Initialize your data structure here. */ MyQueue() { //xstack.push(0); } /** Push element x to the back of queue. */ .原创 2021-12-19 22:03:03 · 81 阅读 · 0 评论 -
程序员面试金典03.02. 栈的最小值
辅助栈:class MinStack {public: stack<int>xstack; stack<int>min_stack; /** initialize your data structure here. */ MinStack() { min_stack.push(INT_MAX); } void push(int x) { xstack.push(x); in.原创 2021-12-19 21:21:48 · 164 阅读 · 0 评论 -
程序员面试金典 02.08. 环路检测
方法1:hash表!/** * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */public class Solution { public ListNode detectCycle(L.原创 2021-12-17 00:30:12 · 72 阅读 · 0 评论 -
程序员面试金典02.07. 链表相交
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */public class Solution { public ListNode getIntersectionNo.原创 2021-12-16 23:33:22 · 643 阅读 · 0 评论