
C++
scut_lrr
这个作者很懒,什么都没留下…
展开
-
leetcode43-字符串相乘(大数相乘)
class Solution { int MAX=110;public: string multiply(string num1, string num2) { vector<int> a(MAX); vector<int> b(MAX); vector<int> res(2*MAX); // 存放结果 int m=num1.size(); int n=num2.size.原创 2021-03-26 11:06:15 · 215 阅读 · 2 评论 -
剑指offer系列-69 二叉树中和为某一值的路径
// 解法一:class Solution {public: vector<vector<int>> pathSum(TreeNode* root, int target) { vector<vector<int>> res; vector<int> tmp; backtrack(root,target,tmp,res); return res; } vo.原创 2021-03-17 16:11:16 · 113 阅读 · 0 评论 -
剑指offer系列-68 II 二叉树的最近公共祖先
// 解法一:递归class Solution {public: TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) { if(root==nullptr) return nullptr; if(root==p || root==q) return root; TreeNode* left=lowestC.原创 2021-03-17 15:28:25 · 120 阅读 · 0 评论 -
剑指offer系列-68 I 二叉搜索树的最近公共祖先
// 解法一:递归class Solution {public: TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) { if(root==nullptr) return nullptr; if(p->val < root->val && q->val < root->val) .原创 2021-03-17 15:16:51 · 163 阅读 · 0 评论 -
剑指offer系列-67 把字符串转换成整数
class Solution {public: int strToInt(string str) { if(str.size()==0) return 0; long sum=0; // 长整型,防止溢出 bool sign_flag=false; int i=0; while(str[i]==' ') // 跳过空格 i++; if(!isdigit(str[i]) &a.原创 2021-03-17 15:07:15 · 102 阅读 · 0 评论 -
剑指offer系列-66 构建乘积数组
class Solution {public: vector<int> constructArr(vector<int>& a) { // 两次遍历 先左再右 ->b中每一个下标对应的值表示前面所有元素的累积 // <-对于b中每一个i,可以获取其之后的元素a[i+1],以及b[i](0~i-1累积),再相乘 int cur=1; vector<int> b(a.size(.原创 2021-03-17 14:37:58 · 77 阅读 · 0 评论 -
剑指offer系列- 65 不用加减乘除做加法
class Solution {public: int add(int a, int b) { int sumAB=0,carry=0; while(b!=0){ sumAB=a^b; // 无进位求和 carry=(unsigned int)(a&b)<<1; // 进位 a=sumAB; b=carry; } .原创 2021-03-16 17:19:22 · 72 阅读 · 0 评论 -
剑指offer系列- 64 求1+2+…+n
// 递归class Solution {public: int sumNums(int n) { if(n==1) return 1; return n+sumNums(n-1); }};原创 2021-03-16 17:11:09 · 93 阅读 · 0 评论 -
剑指offer系列- 63 股票的最大利润
class Solution {public: int maxProfit(vector<int>& prices) { int dp_i_0=0; int dp_i_1=INT_MIN; for(int i=0;i<prices.size();i++){ dp_i_0=max(dp_i_0,dp_i_1+prices[i]); dp_i_1=max(dp_i_1,-pric.原创 2021-03-16 16:07:02 · 80 阅读 · 0 评论 -
剑指offer系列- 62 圆圈中最后剩下的数字
class Solution {public: int lastRemaining(int n, int m) { // 解法一:双向链表 超时 // list<int> helper; // for(int i=0;i<n;i++) // helper.emplace_back(i); // list<int>::iterator cur=helper.begin(); .原创 2021-03-16 15:48:25 · 99 阅读 · 0 评论 -
剑指offer系列- 61 扑克牌中的顺子
class Solution {public: bool isStraight(vector<int>& nums) { unordered_set<int> vis; int min_poke=14,max_poke=0; for(int i=0;i<nums.size();i++){ if(nums[i]==0) continue; .原创 2021-03-16 15:24:29 · 86 阅读 · 0 评论 -
剑指offer系列- 59 II 队列的最大值
class MaxQueue {public: deque<int> q; deque<int> q_max; MaxQueue() { } int max_value() { if(!q_max.empty()) return q_max.front(); return -1; } void push_back(int value) { .原创 2021-03-16 14:54:29 · 142 阅读 · 0 评论 -
剑指offer系列- 59 I 滑动窗口的最大值
// 解法一:暴力法class Solution {public: vector<int> maxSlidingWindow(vector<int>& nums, int k) { if(nums.empty()) return {}; int sz=nums.size()-k+1; vector<int> res; for(int i=0;i<sz;i++.原创 2021-03-16 14:40:13 · 96 阅读 · 0 评论 -
剑指offer系列- 58 I 翻转单词顺序
// 解法一:class Solution {public: string reverseWords(string s) { string res; int sz=s.size(); for(int i=0;i<sz;i++){ string tmp=""; // 忽略所有空格,只存储单词 while(i<sz && !isblank(s[i])).原创 2021-03-15 16:03:13 · 102 阅读 · 0 评论 -
剑指offer系列- 57 II 和为s的连续正数序列
class Solution {public: vector<vector<int>> findContinuousSequence(int target) { vector<vector<int>> res; int left=1; int right=left+1; vector<int> ans; // 达到(1+target)/ 2时left==ri.原创 2021-03-15 15:43:41 · 151 阅读 · 0 评论 -
剑指offer系列- 57 和为s的两个数字
class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { int left=0,right=nums.size()-1; while(left<right){ int sum=nums[left]+nums[right]; if(sum==target) .原创 2021-03-15 14:59:35 · 69 阅读 · 0 评论 -
剑指offer系列- 56 II 数组中数字出现的次数
// 解法一:// 对于出现三次的数字,其每一位不管是0还是1都出现三次,求余3能整除// 不能整除时,若为1,则一定是那个只出现一次的数字的那一位class Solution {public: int singleNumber(vector<int>& nums) { int ans=0; for(int i=0;i<32;i++){ int cnt=0; for(int n:num.原创 2021-03-15 14:54:15 · 121 阅读 · 0 评论 -
剑指offer系列- 56 I 数组中数字出现的次数
class Solution {public: int findFirstBitIs1(int num){ int index=0; while((num&1)==0 && index<8*sizeof(int)){ num=num>>1; index++; } return index; } bool isBit1(int n.原创 2021-03-15 14:45:11 · 102 阅读 · 0 评论 -
剑指offer系列- 58 左旋转字符串
class Solution {public: void reverse(string &s,int l,int r){ while(l<r){ char tmp=s[r]; s[r]=s[l]; s[l]=tmp; l++; r--; } } string reverseLeftWords(string s, in.原创 2021-03-15 13:33:54 · 86 阅读 · 0 评论 -
剑指offer系列- 55 II 平衡二叉树
class Solution {public: bool isBalanced(TreeNode* root) { if(root == nullptr) return true; // 先判断根节点,再递归判断左右子树 return balanced(root) && isBalanced(root->left) && isBalanced(root->right); }.原创 2021-03-14 16:25:24 · 68 阅读 · 0 评论 -
剑指offer系列- 55 I 二叉树的深度
// 队列,层次遍历 注意深度加一的位置class Solution {public: int maxDepth(TreeNode* root) { if(root==nullptr) return 0; queue<TreeNode*> q; q.push(root); int depth=0; while(!q.empty()){ int sz=q..原创 2021-03-14 16:00:24 · 70 阅读 · 0 评论 -
剑指offer系列- 54 二叉搜索树的第k大节点
// 反向中序遍历class Solution {public: int kthLargest(TreeNode* root, int k) { int i=0,res=0; inorder_traverse(root,k,i,res); return res; } void inorder_traverse(TreeNode * root,int k,int& i,int& res){ if(ro.原创 2021-03-14 15:54:14 · 79 阅读 · 0 评论 -
剑指offer系列- 53 II 0~n-1中缺失的数字
// 解法一:异或运算 0~n-1一共n个数,数组中只有n-1个数 将数组元素与下标异或 // 数组中出现的元素一定会被异或操作消掉class Solution {public: int missingNumber(vector<int>& nums) { int res=nums.size(); for(int i=0;i<nums.size();i++){ res^=nums[i]^i; .原创 2021-03-14 15:46:49 · 106 阅读 · 0 评论 -
剑指offer系列- 53 在排序数组中查找数字 I
// 解法一:寻找目标值的左右边界class Solution {public: int leftBound(vector<int>& nums, int target){ int left=0,right=nums.size()-1; while(left<=right){ int mid=left+(right-left)/2; if(nums[mid]==target){ .原创 2021-03-14 15:40:46 · 83 阅读 · 0 评论 -
剑指offer系列- 52 两个链表的第一个公共节点
// 解法一:计算链表长度之差k// 长的先走k步class Solution {public: ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) { ListNode* node=nullptr; int lenA=getLen(headA); int lenB=getLen(headB); if(lenA==0 || lenB==0) retur.原创 2021-03-14 15:26:47 · 80 阅读 · 0 评论 -
剑指offer系列- 51 数组中的逆序对
// 解法一:class Solution {public: // 递归定义:返回数组中索引l~r的逆序对个数 int Msort(vector<int>& nums, int l, int r) { if (l >= r) return 0; int mid = l + (r - l) / 2; vector<int> tmp; // 类似于树的后序遍.原创 2021-03-14 15:15:32 · 118 阅读 · 0 评论 -
剑指offer系列- 50 第一个只出现一次的字符
class Solution {public: char firstUniqChar(string s) { unordered_map<char, int> imap; if(!s.empty()){ for(auto& c : s){ imap[c]++; } for(auto& c:s){ if(.原创 2021-03-14 15:07:39 · 78 阅读 · 0 评论 -
剑指offer系列- 49 丑数
class Solution {public: int nthUglyNumber(int n) { if(n==1) return 1; int factor_2=0; int factor_3=0; int factor_5=0; vector<int> ans(n,1); for(int i=1;i<n;i++){ // 确保ans数组中每一个数的质因子.原创 2021-03-14 14:54:49 · 100 阅读 · 0 评论 -
剑指offer系列-48 最长不含重复字符的子字符串
class Solution {public: int lengthOfLongestSubstring(string s) { if(s.size()==0) return 0; unordered_map<char,int> window; int left=0,right=0; int maxLength=0; while(right<s.size()){ char c.原创 2021-03-12 21:14:14 · 77 阅读 · 0 评论 -
剑指offer系列-47 礼物的最大价值
class Solution {public: int maxValue(vector<vector<int>>& grid) { int n=grid[0].size(); vector<int> dp(n,0); for(auto& row:grid){ dp[0]+=row[0]; for (int i = 1; i < n; i++) .原创 2021-03-12 20:59:04 · 92 阅读 · 0 评论 -
剑指offer系列- 46 把数字翻译成字符串
class Solution {public: int translateNum(int num) { string s=to_string(num); int n=s.size(); vector<int> dp(n+1,1); // dp数组定义:dp[i]表示前i个元素有多少种合理的表示方法 for(int i=2;i<n+1;i++){ int tmp=stoi(s.substr(.原创 2021-03-12 20:39:17 · 72 阅读 · 0 评论 -
剑指offer系列- 45 把数组排成最小的数
class Solution {public: struct cmp{ bool operator()(string& a,string& b){ return a+b<b+a; // 拼接,使用string自带的按字典序从小到大 } }; string minNumber(vector<int>& nums) { vector<string> res;.原创 2021-03-12 17:15:02 · 67 阅读 · 0 评论 -
剑指offer系列- 44 数字序列中某一位的数字
class Solution {public: int findNthDigit(int n) { if(n<10) return n; // 1.先求出是几位数 long base=9; int digit=1; while(n-base*digit>0){ n-=base*digit; base*=10; // 可能因为乘以10越界,因此使用long类.原创 2021-03-12 17:09:17 · 136 阅读 · 0 评论 -
剑指offer系列- 43 1~n 整数中 1 出现的次数
// 找规律// 当前位是0 1 或者2-9之间的数时,1出现的次数class Solution {public: // 拿2304举例,假设当前位是0,即十位 // cur=0 high=23 low=4 digit=10 // 出现1的可能是0000~2219 次数是229-000+1=230 high*10 // 拿2314举例,当前位是1 // cur=1 high=23 low=4 digit=10 // 出现1的可能是0000~231.原创 2021-03-12 16:53:12 · 106 阅读 · 0 评论 -
剑指offer系列- 42 连续子数组的最大和
// 解法一:dpclass Solution {public: int maxSubArray(vector<int>& nums) { int sz=nums.size(); if(sz==1) return nums[0]; int ans=nums[0]; for(int i=1;i<sz;i++){ nums[i]=max(nums[i],nums[i-1]+nums[i.原创 2021-03-12 16:00:03 · 98 阅读 · 0 评论 -
剑指offer系列-41 数据流中的中位数
class MedianFinder {private: // 元素个数相差不超过1 priority_queue<int> larger; priority_queue<int,vector<int>,greater<int>> small;public: /** initialize your data structure here. */ MedianFinder() { } vo.原创 2021-03-11 15:31:45 · 104 阅读 · 1 评论 -
剑指offer系列- 40 最小的k个数
// 解法一:排序class Solution {public: vector<int> getLeastNumbers(vector<int>& arr, int k) { sort(arr.begin(),arr.end()); vector<int> res(k,0); int i=0; while(i<k){ res[i]=arr[i]; .原创 2021-03-11 15:17:28 · 99 阅读 · 0 评论 -
剑指offer系列- 39 数组中超过一半的数
// 只有个数最多的数才能保留到最后class Solution {public: int majorityElement(vector<int>& nums) { int cnt=1,max=nums[0]; for(int i=1;i<nums.size();i++){ // 不相等,减少cnt的值,减少到0,换一个新的最大值 if(nums[i]!=max){ .原创 2021-03-11 15:04:12 · 66 阅读 · 0 评论 -
剑指offer系列- 38 字符串的排列
class Solution {public: vector<string> res; unordered_map<int,bool> index_vis; // 下标是否访问过 unordered_map<string,bool> vis; // 排列是否重复 vector<string> permutation(string s) { string tmp; backtrack(s,t.原创 2021-03-11 14:58:30 · 88 阅读 · 0 评论 -
剑指offer系列- 37 序列化二叉树
// 解法一:层序遍历class Codec {public: // Encodes a tree to a single string. string serialize(TreeNode* root) { if(root==nullptr) return ""; queue<TreeNode*> q; string res=""; q.push(root); while(!q.empty(.原创 2021-03-11 14:42:54 · 105 阅读 · 0 评论