
leetcode
liudongshizhang
这个作者很懒,什么都没留下…
展开
-
32-在排序数组中查找元素的第一个和最后一个位置
class Solution {public: vector<int> searchRange(vector<int>& nums, int target) { int left = 0, right = nums.size() - 1; while (left <= right) { int mid = (left + right) / 2; if (target > n.原创 2020-10-23 11:04:42 · 83 阅读 · 0 评论 -
leetcode402-移掉K位数字
class Solution {public: string removeKdigits(string num, int k) { if (k == num.size()) return "0"; stack<char>stk; for (int i = 0; i < num.size(); i++) { while (!stk.empty() && stk.top() > num[i.原创 2020-10-19 12:28:57 · 102 阅读 · 0 评论 -
189-旋转数组
class Solution {public: void rotate(vector<int>& nums, int k) { k = k % nums.size(); reverse(nums.begin(), nums.begin() + nums.size() - k); reverse(nums.begin() + nums.size() - k, nums.end()); reverse(nums.be.原创 2020-09-17 11:20:24 · 89 阅读 · 0 评论 -
162-寻找峰值
class Solution {public: int findPeakElement(vector<int>& nums) { int left = 0, right = nums.size() - 1; // 思路:O(logn)一般考虑二分搜索 // 规律一:如果nums[i] > nums[i + 1], 则在 i 之前一定存在峰值元素 // 规律二:如果nums[i] < nums[i - .原创 2020-09-11 11:07:53 · 78 阅读 · 0 评论 -
131-分割回文串
class Solution {public: vector<vector<string>>result; vector<string>temp; bool isPalindrome(string substr) { int left = 0, right = substr.size() - 1; while (left < right) { if (substr[left++] !.原创 2020-09-11 10:46:48 · 110 阅读 · 0 评论 -
150-逆波兰表达式求值
class Solution {public: int evalRPN(vector<string>& tokens) { stack<int>arr; for (int i = 0; i < tokens.size(); i++) { if (tokens[i] == "+" || tokens[i] == "-" || tokens[i] == "*" || tokens[i] == "/") {..原创 2020-09-09 11:13:16 · 97 阅读 · 0 评论 -
剑指offer-34二叉树中和为某一值的路径
/** * 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: vector<vector<int>>.原创 2020-09-06 22:49:40 · 95 阅读 · 0 评论 -
c++实现生产者消费者模型
#include <iostream> #include <queue>#include <thread> #include <mutex> #include <unistd.h> #include <condition_variable> using namespace std;mutex mtx;condition_variable produce原创 2020-09-05 15:07:09 · 223 阅读 · 0 评论 -
完全二叉树的插入
利用完全二叉树的性质,首先判断左子树的最右结点与右子树的最右结点高度,如果相等,只需要插入到左子树即可,否则插入右子树。struct Node { int val; Node *l; Node *r;};Node* insert(Node* root, Node*newnode) { if (!root || !newnode)return NULL; if (!root->l) { root->l = newnode; return root; } else if原创 2020-09-05 14:55:38 · 1207 阅读 · 0 评论 -
循环小数
一、题意大意就是输入两个整数a和b,输出a/b的循环小数表示以及循环节的长度。二、解题思路关键在于找循环节,用res来存储每一次的商,用mod数组来存储每一次的余数。在计算小数部分时每次都将上一次的余数乘十作为本次的被除数,依次进行下去直到找到某一次的商和余数在前面出现过,即找到了循环节。要注意输出的格式,每个用例最后应该有两个换行符#include<stdio.h>int res[3005], mod[3005];//res数组记录每一次的商,mod数组记录每一次的余数 int原创 2020-09-04 23:37:50 · 1207 阅读 · 0 评论 -
打印菱形
#include <iostream> using namespace std;int main(){ int n; cin >> n; cout << "要得到的菱形" << endl; for (int i = 1; i <= n; ++i){ for (int j = 1; j <= n - i; ++j) cout << " "; for (int j = 1; j <= i; ++j) .原创 2020-09-04 20:30:44 · 177 阅读 · 0 评论 -
判断是否平衡二叉树(递归解法和后序遍历)
后序遍历解法:/** * 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: bool isBalanced(Tree..原创 2020-09-04 18:10:53 · 140 阅读 · 0 评论 -
51-N皇后
class Solution {public: vector<vector<string>> solveNQueens(int n) { vector<vector<string>>res; // 存储最终结果 vector<string>temp(n, string(n, '.')); vector<int>col(n, 0); // 存储已有的列值 vec..原创 2020-09-04 13:57:49 · 103 阅读 · 0 评论 -
51-N皇后
class Solution {public: vector<vector<string>> solveNQueens(int n) { vector<vector<string>>res; // 存储最终结果 vector<string>temp(n, string(n, '.')); vector<int>col(n, 0); // 存储已有的列值 vect.原创 2020-09-04 11:42:41 · 90 阅读 · 0 评论 -
139-单词拆分
class Solution {public: bool wordBreak(string s, vector<string>& wordDict) { int length = s.size(); // dp[i]表示字符串 s 的前 i 个字符能否拆分成 wordDict vector<bool>dp(length + 1); dp[0] = true; for (int i =..原创 2020-09-04 10:48:19 · 104 阅读 · 0 评论 -
69-x的平方根
class Solution {public: int mySqrt(int x) { int left = 0, right = x / 2 + 1; int res = 0; while (left <= right) { int mid = (left + right) >> 1; if (((long long) mid * mid <= x)) { .原创 2020-09-03 13:30:13 · 107 阅读 · 0 评论 -
25-K个一组翻转链表
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode* reverseKGroup(ListNode* head, int k) { ListNode *.原创 2020-09-02 20:34:56 · 88 阅读 · 0 评论 -
516-最长回文子序列
class Solution {public: int longestPalindromeSubseq(string s) { // dp[i][j]表示s从 i 到 j 代表的字符串的最长回文子序列 int n = s.size(); if (n == 0) return 0; vector<vector<int>>dp(n + 1, vector<int>(n + 1, 0)); .原创 2020-09-01 17:59:35 · 105 阅读 · 0 评论 -
234-回文链表
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: bool isPalindrome(ListNode* head) { if (head == NULL) retur.原创 2020-09-01 12:06:02 · 141 阅读 · 0 评论 -
239-滑动窗口的最大值
class Solution {public: vector<int> maxSlidingWindow(vector<int>& nums, int k) { vector<int>maxInWindow; if (nums.size() >= k && k >= 1) { deque<int>indexs; for (int i .原创 2020-09-01 10:59:36 · 86 阅读 · 0 评论 -
172-阶乘后的零
统计因子中5的个数class Solution {public: int trailingZeroes(int n) { int count = 0; while (n >= 5) { count += (n / 5); n /= 5; } return count; }};原创 2020-09-01 10:18:41 · 80 阅读 · 0 评论 -
50-Pow(x, n)
class Solution {public: double myPow(double x, long long n) { if (n == 0 ) return 1; if (n < 0) return 1 / myPow(x, -n); // 如果n是奇数 if (n % 2) { return x * myPow(x, n - 1); } return myPow(.原创 2020-08-31 22:50:32 · 86 阅读 · 0 评论 -
76-最小覆盖子串
class Solution {public: string minWindow(string s, string t) { if(s.size() < t.size()) return ""; unordered_map<char, int>need; //目标查询的字符以及数量 for (int i = 0; i < t.size(); i++) { need[t[i]]++; }.原创 2020-08-30 23:33:10 · 232 阅读 · 0 评论 -
剑指offer49-丑数
class Solution {public: int nthUglyNumber(int n) { if (n < 6) return n; // 搜索起点 int start2 = 1, start3 =1, start5 = 1; vector<int>dp(n + 1, 0); for (int i = 1; i <= 6; i++) { dp[i] = i...原创 2020-08-28 10:08:40 · 80 阅读 · 0 评论 -
106-从中序与后序遍历序列构造二叉树
/** * 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* buildTree(vector<.原创 2020-08-27 10:43:26 · 96 阅读 · 0 评论 -
105-从前序和中序遍历序列构造二叉树
/** * 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* buildTree(vector<.原创 2020-08-27 10:41:02 · 102 阅读 · 0 评论 -
222-完全二叉树的节点个数
/** * 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: int countNodes(TreeNode* root).原创 2020-08-24 11:45:23 · 147 阅读 · 0 评论 -
109-有序链表转换二叉搜索树
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : val(x), next(next.原创 2020-08-23 11:08:00 · 110 阅读 · 1 评论 -
56-合并区间
1、对 vector<vector> 排序,需要按照先比较区间开始,如果相同再比较区间结束, 使用默认的排序规则即可2、使用双指针,左边指针指向当前区间的开始3、使用一个变量来记录连续的范围 t4、右指针开始往后寻找,如果后续的区间的开始值比 t 还小,说明重复了,可以归并到一起5、此时更新更大的结束值到 t6、直到区间断开,将 t 作为区间结束,存储到答案里7、然后移动左指针,跳过中间已经合并的区间class Solution {public: vector&l.原创 2020-08-23 09:39:09 · 100 阅读 · 0 评论 -
面试题01.04-回文排列
class Solution {public: bool canPermutePalindrome(string s) { vector<int>arr(128, 0); for (int i = 0; i < s.size(); i++) { int index = s[i] - 0; arr[index]++; } // 字符个数为奇数的个数 in.原创 2020-08-22 11:36:49 · 162 阅读 · 0 评论 -
127-单词接龙
class Solution {public: int ladderLength(string beginWord, string endWord, vector<string>& wordList) { unordered_set<string> wordDict(wordList.begin(), wordList.end()); if (wordDict.find(endWord) == wordDict.end()) ret.原创 2020-08-21 11:30:06 · 107 阅读 · 0 评论 -
leetcode-81.搜索旋转排序数组
class Solution {public: bool search(vector<int>& nums, int target) { int left = 0; int right = nums.size() - 1; while (left <= right) { int mid = left + (right - left) / 2; if (nums[mid] ==.原创 2020-07-19 13:08:06 · 109 阅读 · 0 评论 -
leetcode-300.最长上升子序列
class Solution {public: int lengthOfLIS(vector<int>& nums) { if (nums.size() < 1) { return 0; } int max = 1; vector<int>dp(nums.size(), 1); for (int i = 1; i < nums.size(); i++.原创 2020-07-14 10:07:24 · 94 阅读 · 0 评论 -
leetcode 68 - 二叉树的最近公共祖先
class Solution {public: TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) { // 如果根节点为空,则返回空 if (root == NULL) { return NULL; } // 如果根节点是p或者q,则返回root if (root == q || root == p.原创 2020-07-11 13:20:27 · 91 阅读 · 0 评论 -
leetcode-23. 合并K个排序链表
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode* mergeKLists(vector<ListNode*>& lists) { .原创 2020-07-08 23:31:39 · 103 阅读 · 0 评论 -
leetcode-16. 最接近的三数之和
class Solution {public: int threeSumClosest(vector<int>& nums, int target) { sort(nums.begin(), nums.end()); int minnum = pow(2,31) - 1; int res = 0; for (int i = 0; i < nums.size() - 2; i++) { .原创 2020-07-08 22:53:59 · 81 阅读 · 0 评论 -
leetcode-106. 从中序与后序遍历序列构造二叉树
class Solution {public: TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) { int iend = inorder.size() - 1; int postend = postorder.size() - 1; return dfs(inorder, 0, iend, postorder, 0, post.原创 2020-07-06 23:10:25 · 131 阅读 · 0 评论 -
leetcode-105. 从前序与中序遍历序列构造二叉树
class Solution {public: TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) { int pend = preorder.size() - 1; int iend = inorder.size() - 1; return dfs(preorder, 0, pend, inorder, 0, iend); .原创 2020-07-06 22:50:32 · 102 阅读 · 0 评论 -
leetcode-131分割回文串
class Solution {public: vector<vector<string>>result; vector<string>temp_str; bool isPalindrome(string substr) { int left = 0, right = substr.size() - 1; while(left < right) { if (substr[left+.原创 2020-07-01 22:35:52 · 91 阅读 · 0 评论 -
leetcode-130.被围绕的区域
class Solution {public: void solve(vector<vector<char>>& board) { if(board.size() == 0) return; int row = board.size(); int col = board[0].size(); // 左右边界 for(int i = 0; i < row; i++) { .原创 2020-06-28 23:00:05 · 1161 阅读 · 0 评论