剑指offer
笨比master
这个作者很懒,什么都没留下…
展开
-
【leetcode 二叉树 C++】【剑指 Offer】 37. 序列化二叉树 297. Serialize and Deserialize Binary Tree
剑指 Offer 37. 序列化二叉树理解不了,看的大佬的解题/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Codec {public:原创 2021-03-17 15:45:00 · 65 阅读 · 0 评论 -
【leetcode 归并排序 C++】【剑指 Offer】 51. 数组中的逆序对
剑指 Offer 51. 数组中的逆序对class Solution {public: int ans = 0; void mergeSort(vector<int>& nums, int left, int right, vector<int>& temp) { if(left >= right) return ; int mid = (left + right) / 2; mergeSor原创 2021-03-17 14:37:59 · 92 阅读 · 0 评论 -
【leetcode 动态规划 C++】【剑指 Offer】 60. n个骰子的点数
剑指 Offer 60. n个骰子的点数class Solution {public: vector<double> dicesProbability(int n) { vector<double> ans(5*n + 1, 1.0 / 6); for(int ii = 2; ii <= n; ii++) { vector<double> temp(5*n + 1, 0);原创 2021-03-17 13:54:26 · 170 阅读 · 0 评论 -
【leetcode 数学问题 C++】【剑指 Offer】 66. 构建乘积数组
剑指 Offer 66. 构建乘积数组class Solution {public: vector<int> constructArr(vector<int>& a) { if(a.size() == 0) return {}; if(a.size() == 1) return {1}; vector<int> left(a.size()); vector<int> righ原创 2021-03-17 11:36:37 · 119 阅读 · 0 评论 -
【leetcode 单调栈 C++】【剑指 Offer】 63. 股票的最大利润 121. Best Time to Buy and Sell Stock
剑指 Offer 63. 股票的最大利润121. Best Time to Buy and Sell Stockclass Solution {public: int maxProfit(vector<int>& prices) { stack<int> S; int ans = 0; for(auto price : prices) { if(S.empty() || price <原创 2021-03-16 12:01:27 · 86 阅读 · 0 评论 -
【leetcode C++】【剑指 Offer】 67. 把字符串转换成整数
剑指 Offer 67. 把字符串转换成整数class Solution {public: int strToInt(string str) { str.erase(0, str.find_first_not_of(' ')); int64_t ans = 0; int tag = 1; for(int ii = 0; ii < str.size(); ii++) { char ch = str[ii原创 2021-03-16 11:29:25 · 119 阅读 · 0 评论 -
【leetcode C++】【剑指 Offer】 61. 扑克牌中的顺子
剑指 Offer 61. 扑克牌中的顺子class Solution {public: bool isStraight(vector<int>& nums) { vector<int> V(14, 0); for(auto num : nums) { V[num]++; if(num && V[num] >= 2) return false; }原创 2021-03-16 11:06:29 · 79 阅读 · 0 评论 -
【leetcode 递归 C++】【剑指 Offer】 64. 求1+2+…+n
剑指 Offer 64. 求1+2+…+nclass Solution {public: int ans = 0; int sumNums(int n) { int x = n > 0 && sumNums(n - 1); ans += n; return ans; }};原创 2021-03-15 20:36:07 · 109 阅读 · 0 评论 -
【leetcode 数学问题(约瑟夫环问题) C++】【剑指 Offer】 62. 圆圈中最后剩下的数字
剑指 Offer 62. 圆圈中最后剩下的数字class Solution {public: int lastRemaining(int n, int m) { int ans = 0; for(int ii = 2; ii <= n; ii++) { ans = (ans + m) % ii; } return ans; }};原创 2021-03-15 17:16:54 · 150 阅读 · 0 评论 -
【leetcode 优先队列 C++】【剑指 Offer】 45. 把数组排成最小的数
剑指 Offer 45. 把数组排成最小的数class Solution {public: struct cmp{ bool operator ()(string str1, string str2) { return str1 + str2 > str2 + str1; } }; string minNumber(vector<int>& nums) { priority_que原创 2021-03-15 15:34:49 · 120 阅读 · 0 评论 -
【leetcode 数学问题 C++】【剑指 Offer】 44. 数字序列中某一位的数字
剑指 Offer 44. 数字序列中某一位的数字class Solution {public: int findNthDigit(int n) { if(n < 10) return n; uint64_t cnt = 10; uint64_t base = 90, len = 2; while(cnt + len * base <= n) { cnt += len * base;原创 2021-03-15 14:34:57 · 115 阅读 · 0 评论 -
【leetcode 数学问题 C++】【剑指 Offer】 43. 1~n 整数中 1 出现的次数 233. Number of Digit One
剑指 Offer 43. 1~n 整数中 1 出现的次数class Solution {public: int countDigitOne(int n) { uint32_t base = 1; uint32_t ans = 0; int N = n; while(n) { ans += n / 10 * base; if(n % 10) ans += base;原创 2021-03-15 13:26:07 · 86 阅读 · 0 评论 -
【leetcode 动态规划 C++】【剑指 Offer】 47. 礼物的最大价值
剑指 Offer 47. 礼物的最大价值class Solution {public: int maxValue(vector<vector<int>>& grid) { int Y = grid.size(), X = grid[0].size(); for(int yy = 0; yy < Y; yy++) { for(int xx = 0; xx < X; xx++) {原创 2021-03-14 19:03:10 · 120 阅读 · 0 评论 -
【leetcode 动态规划 C++】【剑指 Offer】 46. 把数字翻译成字符串
剑指 Offer 46. 把数字翻译成字符串class Solution {public: int translateNum(int num) { if(num < 10) return 1; string str = to_string(num); vector<int> dp(str.size(), 0); dp[0] = 1; if(str[0] == '1' || str[0] == '2原创 2021-03-14 17:26:16 · 146 阅读 · 0 评论 -
【leetcode 动态规划 C++】【剑指 Offer】 48. 最长不含重复字符的子字符串 3. Longest Substring Without Repeating Characters
剑指 Offer 48. 最长不含重复字符的子字符串3. Longest Substring Without Repeating Charactersclass Solution {public: int lengthOfLongestSubstring(string s) { if(s.size() <= 1) return s.size(); int ans = 1, dp = 0; unordered_map<char, in原创 2021-03-14 14:14:08 · 129 阅读 · 0 评论 -
【leetcode 恶心 C++】【剑指 Offer】 20. 表示数值的字符串
剑指 Offer 20. 表示数值的字符串class Solution {public: char charSet[5] = {'e', 'E', '.', '+', '-'}; bool isValid(char ch) { if(ch >= '0' && ch <= '9') return true; for(auto cc : charSet) if(ch == cc) return true; retu原创 2021-03-14 11:47:36 · 109 阅读 · 0 评论 -
【leetcode 字符串 C++】【剑指 Offer】 58 - II. 左旋转字符串
剑指 Offer 58 - II. 左旋转字符串class Solution {public: string reverseLeftWords(string s, int n) { if(n > s.size()) n = 0; return s.substr(n, s.size() - n) + s.substr(0, n); }};原创 2021-03-14 10:00:01 · 80 阅读 · 0 评论 -
【leetcode 位运算 C++】【剑指 Offer】 65. 不用加减乘除做加法
剑指 Offer 65. 不用加减乘除做加法class Solution {public: int myAdd(uint32_t a, uint32_t b) { if(!b) return a; return myAdd(a ^ b, (a & b) << 1); } int add(int a, int b) { return myAdd(a, b); }};class Solution {原创 2021-03-13 21:09:11 · 74 阅读 · 0 评论 -
【leetcode 】剑指 Offer 50. 第一个只出现一次的字符
剑指 Offer 50. 第一个只出现一次的字符class Solution {public: char firstUniqChar(string s) { vector<int> times(26, 0); for(auto ch : s) times[ch - 'a']++; for(auto ch : s) if(times[ch - 'a'] == 1) return ch; return ' '; }原创 2021-03-13 19:32:29 · 65 阅读 · 0 评论 -
【leetcode 多路归并 C++】【剑指 Offer】 49. 丑数
剑指 Offer 49. 丑数class Solution {public: int nthUglyNumber(int n) { int ind2 = 0, ind3 = 0, ind5 = 0; vector<int> V(n, 0); V[0] = 1; for(int ii = 1; ii < n; ii++) { V[ii] = min(min(V[ind2] * 2, V[in原创 2021-03-13 19:23:23 · 88 阅读 · 0 评论 -
【leetcode 字符串 C++】【剑指 Offer】 58 - I. 翻转单词顺序
剑指 Offer 58 - I. 翻转单词顺序class Solution {public: string reverseWords(string s) { string ans = "", word = ""; stack<string> S; for(auto ch : s) { if(ch != ' ') word += ch; else { if(原创 2021-03-13 17:22:21 · 154 阅读 · 0 评论 -
【leetcode 双指针 C++】【剑指 Offer】 57 - II. 和为s的连续正数序列
剑指 Offer 57 - II. 和为s的连续正数序列class Solution {public: vector<vector<int>> findContinuousSequence(int target) { vector<vector<int> > ans; int N = target / 2 + 1, sum = 0; for(int a = 1, L; a <= N; a++)原创 2021-03-13 16:49:11 · 67 阅读 · 0 评论 -
【leetcode 双指针 C++】【剑指 Offer】 57. 和为s的两个数字
剑指 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];原创 2021-03-13 16:34:54 · 116 阅读 · 0 评论 -
【leetcode 位运算 C++】【剑指 Offer】 56 - II. 数组中数字出现的次数 II
剑指 Offer 56 - II. 数组中数字出现的次数 IIclass Solution {public: int singleNumber(vector<int>& nums) { int ans = 0, bit = 1; for(int ii = 0; ii < 31; ii++) { int cnt = 0; for(auto num : nums) if(bit & n原创 2021-03-13 16:31:06 · 109 阅读 · 0 评论 -
【leetcode 位运算 C++】【剑指 Offer】 56 - I. 数组中数字出现的次数
剑指 Offer 56 - I. 数组中数字出现的次数class Solution {public: vector<int> singleNumbers(vector<int>& nums) { int a = 0, b = 0, temp = 0; for(auto num : nums) temp ^= num; int bit = 1; while((bit & temp) == 0)原创 2021-03-13 16:20:55 · 77 阅读 · 0 评论 -
【leetcode 二叉树 C++】剑指 Offer 55 - II. 平衡二叉树 110. Balanced Binary Tree
剑指 Offer 55 - II. 平衡二叉树110. Balanced Binary Tree/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Sol原创 2021-03-13 15:53:42 · 78 阅读 · 0 评论 -
【leetcode 恶心 C++】剑指 Offer 19. 正则表达式匹配 10. Regular Expression Matching
剑指 Offer 19. 正则表达式匹配class Solution {public: bool isMatch(string& s, string& p, int s_pos, int p_pos) { if(s_pos >= s.size() && p_pos >= p.size()) return true; if(p_pos >= p.size()) return false; if(s_原创 2021-03-13 15:47:01 · 63 阅读 · 0 评论 -
【leetcode C++】【剑指 Offer】 53 - I. 在排序数组中查找数字 I
剑指 Offer 53 - I. 在排序数组中查找数字 Iclass Solution {public: int search(vector<int>& nums, int target) { int ans = 0; for(auto num : nums) if(num == target) ans++; return ans; }};原创 2021-03-11 15:25:50 · 196 阅读 · 0 评论 -
【leetcode 设计题 C++】剑指 Offer 59 - II. 队列的最大值
剑指 Offer 59 - II. 队列的最大值class MaxQueue {public: queue<int> Q; deque<int> maxQ; MaxQueue() { } int max_value() { return maxQ.empty() ? -1 : maxQ.front(); } void push_back(int value) { Q.pu原创 2021-03-11 15:18:32 · 154 阅读 · 0 评论 -
【leetcode C++】剑指 Offer 59 - I. 滑动窗口的最大值
剑指 Offer 59 - I. 滑动窗口的最大值class Solution {public: vector<int> maxSlidingWindow(vector<int>& nums, int k) { vector<int> ans; for(int ii = k - 1; ii < nums.size(); ii++) { int max_val = nums[ii];原创 2021-03-11 12:02:38 · 124 阅读 · 0 评论 -
【leetcode C++】剑指 Offer 38. 字符串的排列
剑指 Offer 38. 字符串的排列class Solution {public: vector<string> V; void permutation(string& s, int ind) { if(ind == s.size() - 1) V.push_back(s); set<char> S; for(int ii = ind; ii < s.size(); ii++) {原创 2021-03-10 21:38:20 · 172 阅读 · 0 评论 -
【leetcode 二叉树 C++】剑指 Offer 54. 二叉搜索树的第k大节点
剑指 Offer 54. 二叉搜索树的第k大节点/** * 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: vecto原创 2021-03-10 13:26:45 · 133 阅读 · 0 评论 -
【leetcode C++】【剑指 Offer】 53 - II. 0~n-1中缺失的数字
剑指 Offer 53 - II. 0~n-1中缺失的数字class Solution {public: int missingNumber(vector<int>& nums) { if(nums[0] != 0) return 0; for(int ii = 1; ii < nums.size(); ii++) { if(nums[ii] - nums[ii - 1] == 2) return ii;原创 2021-03-09 17:41:23 · 70 阅读 · 0 评论 -
【leetcode 二叉树 C++】【剑指 Offer】 68 - II. 二叉树的最近公共祖先 236. Lowest Common Ancestor of a Binary Tree
剑指 Offer 68 - II. 二叉树的最近公共祖先236. Lowest Common Ancestor of a Binary Tree/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL原创 2021-03-09 17:13:52 · 59 阅读 · 0 评论 -
【leetcode 动态规划 C++】【剑指 Offer】 42. 连续子数组的最大和
剑指 Offer 42. 连续子数组的最大和class Solution {public: int maxSubArray(vector<int>& nums) { int ans = nums[0], dp = nums[0]; for(int ii = 1; ii < nums.size(); ii++) { dp = max(nums[ii], dp + nums[ii]); ans原创 2021-03-09 11:12:06 · 69 阅读 · 0 评论 -
【leetcode 设计题 C++】【剑指 Offer】 41. 数据流中的中位数 295. Find Median from Data Stream
剑指 Offer 41. 数据流中的中位数295. Find Median from Data Streamclass MedianFinder {public: /** initialize your data structure here. */ int len = 0; priority_queue<int> PQ_less; priority_queue<int, vector<int>, greater<int> &原创 2021-03-09 11:11:00 · 80 阅读 · 0 评论 -
【leetcode 堆 C++】剑指 Offer 40. 最小的k个数
剑指 Offer 40. 最小的k个数class Solution {public: vector<int> getLeastNumbers(vector<int>& arr, int k) { priority_queue<int> PQ; for(auto num : arr) { PQ.push(num); if(PQ.size() > k) PQ.pop()原创 2021-03-09 09:57:44 · 82 阅读 · 0 评论 -
【leetcode C++】剑指 Offer 39. 数组中出现次数超过一半的数字
剑指 Offer 39. 数组中出现次数超过一半的数字class Solution {public: int majorityElement(vector<int>& nums) { int votes = 0, x = -1; for(auto num : nums) { if(votes == 0) x = num; if(x == num) votes++; els原创 2021-03-07 20:20:31 · 108 阅读 · 0 评论 -
【leetcode 链表 C++】【剑指 Offer】 35. 复杂链表的复制 138. Copy List with Random Pointer
剑指 Offer 35. 复杂链表的复制138. Copy List with Random Pointer/*// Definition for a Node.class Node {public: int val; Node* next; Node* random; Node(int _val) { val = _val; next = NULL; random = NULL; }};*/原创 2021-03-07 19:48:42 · 62 阅读 · 0 评论 -
【leetcode 栈 C++】剑指 Offer 31. 栈的压入、弹出序列 946. Validate Stack Sequences
剑指 Offer 31. 栈的压入、弹出序列946. Validate Stack Sequencesclass Solution {public: bool validateStackSequences(vector<int>& pushed, vector<int>& popped) { stack<int> S; for(int ii = 0, jj = 0; ii < pushed.size()原创 2021-03-07 19:06:30 · 69 阅读 · 0 评论