
剑指offer
Python ml
这个作者很懒,什么都没留下…
展开
-
剑指 Offer II 024. 反转链表
迭代原创 2022-07-23 18:52:40 · 157 阅读 · 0 评论 -
剑指 Offer II 031. 最近最少使用缓存
哈希表与双向链表的数据结构原创 2022-07-22 20:13:55 · 319 阅读 · 0 评论 -
剑指 Offer II 015. 字符串中的所有变位词
滑动窗口原创 2022-06-30 18:42:11 · 99 阅读 · 0 评论 -
剑指 Offer II 080. 含有 k 个元素的组合 回溯
回溯原创 2022-06-29 11:17:16 · 124 阅读 · 0 评论 -
剑指 Offer II 040. 矩阵中最大的矩形
单调栈原创 2022-06-28 13:41:17 · 83 阅读 · 0 评论 -
剑指 Offer II 039. 直方图最大矩形面积 单调栈
单调栈原创 2022-06-26 23:23:06 · 160 阅读 · 0 评论 -
剑指 Offer II 035. 最小时间差
抽屉原理原创 2022-06-25 13:40:27 · 116 阅读 · 0 评论 -
剑指 Offer II 012. 左右两边子数组的和相等
无前缀和数组原创 2022-06-24 23:58:59 · 101 阅读 · 0 评论 -
剑指 Offer II 010. 和为 k 的子数组 前缀和差
所以我们考虑以 i 结尾的和为 k 的连续子数组个数时只要统计有多少个前缀和为 pre[i]-k的pre[j]即可原创 2022-06-24 23:11:00 · 111 阅读 · 0 评论 -
剑指 Offer II 025. 链表中的两数相加
栈取反原创 2022-06-24 16:19:14 · 138 阅读 · 0 评论 -
剑指 Offer II 014. 字符串中的变位词 滑动窗口
滑动窗口,双指针原创 2022-06-24 12:38:33 · 74 阅读 · 0 评论 -
剑指 Offer II 045. 二叉树最底层最左边的值
bfs原创 2022-06-03 17:26:44 · 198 阅读 · 0 评论 -
剑指 Offer II 038. 每日温度 (单调递减栈)
单调栈原创 2022-06-02 17:17:06 · 143 阅读 · 0 评论 -
剑指 Offer II 008. 和大于等于 target 的最短子数组(滑动窗口)
滑动窗口原创 2022-06-02 10:18:27 · 65 阅读 · 0 评论 -
剑指 Offer 57 - II. 和为s的连续正数序列 滑动窗口
剑指 Offer 57 - II. 和为s的连续正数序列class Solution {public: vector<vector<int>> findContinuousSequence(int target) { int end=target/2+1,tempsum=0,i=1,j=1; vector<vector<int>>res; while(i<=target/2){原创 2022-05-26 21:36:25 · 85 阅读 · 0 评论 -
剑指 Offer 56 - I. 数组中数字出现的次数 (分组异或)
剑指 Offer 56 - I. 数组中数字出现的次数class Solution {public: vector<int> singleNumbers(vector<int>& nums) { int res=0,div=1,a=0,b=0; for(int i:nums) res^=i; while((div&res)==0) div<<=1;原创 2022-05-19 22:54:55 · 122 阅读 · 0 评论 -
剑指 Offer 59 - II. 队列的最大值
剑指 Offer 59 - II. 队列的最大值class MaxQueue { queue<int>Q; deque<int>D;public: MaxQueue() { } int max_value() { if(D.empty()) return -1; return D.front(); } void push_back(int value) {原创 2022-05-19 13:23:49 · 96 阅读 · 0 评论 -
剑指 Offer 66. 构建乘积数组
剑指 Offer 66. 构建乘积数组class Solution {public: vector<int> constructArr(vector<int>& a) { int len=a.size(); if(len==0) return{}; vector<int>b(len,1); int tmp=1; for(int i=1;i<len;++i){原创 2022-05-19 12:19:32 · 77 阅读 · 0 评论 -
剑指 Offer 49. 丑数
剑指 Offer 49. 丑数所有丑数现在假设有3个数组,分别是:A:{1* 2,2* 2,3* 2 ,4* 2,5* 2,6* 2,8 * 2,10 * 2…}B:{1* 3,2* 3,3* 3,4* 3,5* 3,6* 3,8* 3,10* 3…}C:{1* 5,2* 5,3* 5,4* 5,5* 5,6* 5,8* 5,10* 5…}那么所有丑数的排列,必定就是上面ABC3个数组的合并结果然后去重得到的,那么这不就转换成了三个有序数组的无重复元素合并的问题了吗?合并有序数组的一个比原创 2022-05-19 10:23:24 · 88 阅读 · 0 评论 -
剑指 Offer 39. 数组中出现次数超过一半的数字
剑指 Offer 39. 数组中出现次数超过一半的数字class Solution {public: int majorityElement(vector<int>& nums) { int res=nums[0],count=1,size=nums.size(); for(int i=1;i<size;++i){ if(nums[i]!=res) { --count;原创 2022-05-18 23:44:37 · 79 阅读 · 0 评论 -
剑指 Offer 62. 圆圈中最后剩下的数字
剑指 Offer 62. 圆圈中最后剩下的数字class Solution {public: int lastRemaining(int n, int m) { int ans=0; for(int i=2;i<=n;++i){ ans=(ans+m)%i; } return ans; }};原创 2022-05-18 18:43:54 · 86 阅读 · 0 评论 -
剑指 Offer 14- I. 剪绳子 dp
剑指 Offer 14- I. 剪绳子 class Solution {public: int cuttingRope(int n) { if(n<=3) return n-1; //2=1+1->1*1<2 ,3=1+2-> 1*2<3 ,4=2+2->2*2=4 vector<int> dp(n+1,1); dp[2]=2,dp[3]=3; //当拆分出绳子<=3时,不原创 2022-05-18 13:44:04 · 79 阅读 · 0 评论 -
剑指 Offer 41. 数据流中的中位数
剑指 Offer 41. 数据流中的中位数class MedianFinder {public: /** initialize your data structure here. */ priority_queue<int>minHeap; priority_queue<int,vector<int>,greater<int>> maxHeap; MedianFinder() { } void a原创 2022-05-18 11:41:03 · 75 阅读 · 0 评论 -
剑指 Offer 40. 最小的k个数
剑指 Offer 40. 最小的k个数class Solution {public: vector<int> getLeastNumbers(vector<int>& arr, int k) { vector<int>res; if(k==0) return res; priority_queue<int>myPriorityQueue; for(int i=0;i<k;原创 2022-05-18 10:45:39 · 70 阅读 · 0 评论 -
剑指 Offer 55 - I. 二叉树的深度
递归class Solution {public: int maxDepth(TreeNode* root) { if(!root) return 0; else return 1+max(maxDepth(root->left),maxDepth(root->right)); }};层序遍历class Solution {public: int maxDepth(TreeNode* root) { if(!r原创 2022-05-18 09:50:04 · 119 阅读 · 0 评论 -
剑指 Offer 36. 二叉搜索树与双向链表
剑指 Offer 36. 二叉搜索树与双向链表class Solution {public: Node* treeToDoublyList(Node* root) { if(!root) return nullptr; preOrder(root); head->left=pre; pre->right=head; return head; } private: Node *pre原创 2022-05-17 23:48:02 · 79 阅读 · 0 评论 -
剑指 Offer 61. 扑克牌中的顺子
剑指 Offer 61. 扑克牌中的顺子class Solution {public: bool isStraight(vector<int>& nums) { set<int>s; for(int i:nums){ if(s.find(i)!=s.end()) return false; if(i) s.insert(i); } return *s.r原创 2022-05-17 22:59:00 · 97 阅读 · 0 评论 -
剑指 Offer 60. n个骰子的点数 动态规划
剑指 Offer 60. n个骰子的点数class Solution {public: vector<double> dicesProbability(int n) { vector<double> dp(6,1.0/6.0); for(int i=2;i<=n;++i){ //由于 dp[i]仅由 dp[i-1]递推得出,为降低空间复杂度,只建立两个一维数组dp,tmp交替前进即可。原创 2022-05-17 16:49:26 · 116 阅读 · 0 评论 -
剑指 Offer 54. 二叉搜索树的第k大节点
剑指 Offer 54. 二叉搜索树的第k大节点class Solution {public: int res,cnt=0; void InOrder(TreeNode*root,int k){ if(root==nullptr) return; InOrder(root->right,k); if(k==0) return; if(++cnt==k) { res=root->val;原创 2022-05-16 19:13:56 · 68 阅读 · 0 评论 -
剑指 Offer 68 - II. 二叉树的最近公共祖先
剑指 Offer 68 - II. 二叉树的最近公共祖先class Solution {public: queue<TreeNode*> Path; void PreOrder(TreeNode* root, TreeNode* p){ //preOrder记录root到p的路径 if(!root) return; if(root==p) { Path.push(p); return;原创 2022-05-16 11:51:12 · 203 阅读 · 0 评论 -
剑指 Offer 68 - I. 二叉搜索树的最近公共祖先
class Solution {public: TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) { if(root==nullptr) return NULL; if(p->val>root->val&&q->val>root->val) return lowestCommonAncestor(ro原创 2022-05-15 23:55:33 · 80 阅读 · 0 评论 -
剑指 Offer 64. 求1+2+…+n
剑指 Offer 64. 求1+2+…+nclass Solution {public: int sumNums(int n) { n&&(n+=sumNums(n-1)); //逻辑符短路 return n; }};原创 2022-05-15 23:42:47 · 99 阅读 · 0 评论 -
剑指 Offer 15. 二进制中1的个数
剑指 Offer 15. 二进制中1的个数class Solution {public: int hammingWeight(uint32_t n) { int res=0; while(n>0){ if(n%2==1) ++res; n/=2; } return res; }};原创 2022-05-15 19:12:53 · 101 阅读 · 0 评论 -
剑指 Offer 31. 栈的压入、弹出序列
剑指 Offer 31. 栈的压入、弹出序列class Solution {public: bool validateStackSequences(vector<int>& pushed, vector<int>& popped) { stack<int>Stack; int size=pushed.size(),j=0; for(int i=0;i<size;++i){原创 2022-05-15 00:16:25 · 100 阅读 · 0 评论 -
剑指 Offer 42. 连续子数组的最大和
剑指 Offer 42. 连续子数组的最大和class Solution {public: int maxSubArray(vector<int>& nums) { int res=nums[0],size=nums.size(); vector<int>dp(size); dp[0]=nums[0]; for(int i=1;i<nums.size();++i){ d原创 2022-05-13 21:40:30 · 83 阅读 · 0 评论 -
剑指 Offer 52. 两个链表的第一个公共节点
剑指 Offer 52. 两个链表的第一个公共节点class Solution {public: ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) { if(headA == nullptr || headB == nullptr) return nullptr; int lenA=0,lenB=0; ListNode *A=headA,*B=原创 2022-05-13 20:24:09 · 261 阅读 · 0 评论 -
剑指 Offer 48. 最长不含重复字符的子字符串 (DP、滑动窗口+哈希)
剑指 Offer 48. 最长不含重复字符的子字符串class Solution {public: int lengthOfLongestSubstring(string s) { int len=s.length(),maxlen=0,j=-1; //j=-方便最初自动右移 unordered_set<char> occur; // 哈希集合,记录每个字符是否出现过 for(int i=0;i<len;++i){原创 2022-05-13 16:40:02 · 222 阅读 · 0 评论 -
剑指 Offer 22. 链表中倒数第k个节点
剑指 Offer 22. 链表中倒数第k个节点class Solution {public: ListNode* getKthFromEnd(ListNode* head, int k) { ListNode*fast=head,*slow=head; for(int i=0;i<k;++i){ fast=fast->next; } while(fast){ slow=sl原创 2022-05-13 13:58:55 · 91 阅读 · 0 评论 -
剑指 Offer 46. 把数字翻译成字符串
剑指 Offer 46. 把数字翻译成字符串class Solution {public: int translateNum(int num) { string s=to_string(num); if(s.length()==1) return 1; else if(s.length()==2){ //两位数 if(stoi(s)<26) return 2; else return 1;原创 2022-05-13 12:37:04 · 80 阅读 · 0 评论 -
剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
剑指 Offer 21. 调整数组顺序使奇数位于偶数前面class Solution {public: vector<int> exchange(vector<int>& nums) { int left=0,right=nums.size()-1; while(left<right){ while(nums[left]%2!=0&&left<right) ++left;原创 2022-05-13 10:53:24 · 124 阅读 · 0 评论