自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(120)
  • 收藏
  • 关注

原创 329. Longest Increasing Path in a Matrix LeetCode

题意:求矩形内最长上升序列,可以从任意格子出发,只能走上下左右四个格子。 题解:记忆化搜索。class Solution { public: int dir[4][2] = {{0,1},{0,-1},{1,0},{-1,0}}; int dfs(int i ,int j,vector<vector<int>>& dp,vector<vector<int>>& matrix)

2016-02-16 19:35:49 266

原创 109. Convert Sorted List to Binary Search Tree LeetCode

题意:把排序好的链表转换成二叉搜索树。 题解:和把排序好的数组转换成二叉搜索树是一个思路,每次从中间分开。这里用slow和fast去找链表的中间节点。class Solution { public: TreeNode* sortedListToBST(ListNode* head) { if(head == NULL) return NULL; if(hea

2016-02-16 19:22:51 208

原创 39. Combination Sum LeetCode

题意:给出n个元素和k,求所有由n个元素加和等于k的集合。n个元素可以重复使用多次。 题解:递归class Solution { public: void dfs(vector<int>& candidates, int target, vector<int>& pre, vector<vector<int>>& ans,int k,int sum) { if(su

2016-02-16 19:20:39 198

原创 114. Flatten Binary Tree to Linked List LeetCode

题意:把二叉树变成链表。 题解:一边往下遍历一边改变树的形态。class Solution { public: void dfs(TreeNode* root,TreeNode* &pre) { if(root == NULL) return; if(pre != NULL) pre->left = NULL,pre->rig

2016-02-16 19:18:08 185

原创 78. Subsets LeetCode

题意:给出一个集合,求这个集合的所有子集。要求集合内升序排序。 题解:递归求解。class Solution { public: void dfs(vector<vector<int>>& ans,vector<int> pre,vector<int>& nums ,int k) { for(int i = k; i < nums.size(); i++)

2016-02-16 19:12:15 293

原创 279. Perfect Squares LeetCode

题意:求n能最少能由多少个完全平方数组成。 提交:dp,dp[i]表示i这个数字最少能由多少个完全平方数组成。转移: dp[i] = i(由i个1组成), dp[i] = min(dp[i],dp[i - j * j])( 0<= j <= sqrt(i));class Solution { public: int numSquares(int n) { int dp[n

2016-02-16 19:10:05 253

原创 142. Linked List Cycle II LeetCode

题意:求链表中环的第一个节点。 题解:用slow和fast。假设起点是a,第一个进入环的节点是b,slow和fast相遇的节点是c。那么有2(ab + bc) = ab + bc + cb + bc。 ab = cb。所以我们让slow和fast先相遇,这时得到slow和fast都是c点,然后slow再从链表头开始走,直到slow与fast相等,这时候的slow和fast都是b点。class S

2016-02-16 19:07:17 200

原创 81. Search in Rotated Sorted Array II LeetCode

题意:在旋转数组中查找一个数,与之前不同的是旋转数组里面会有重复的数字出现。 题解:一样的套路,旋转之后的数组,要么是一段连续递增的,要么是两段,分情况讨论二分。class Solution { public: bool search(vector<int>& nums, int target) { int l = 0,r = nums.size() - 1;

2016-02-16 18:58:06 203

原创 215. Kth Largest Element in an Array LeetCode

题意:给了一个乱序的数组,求排序好之后的第k大数。 题解:排序即可。class Solution { public: static bool cmp(int a,int b){return a > b;} int findKthLargest(vector<int>& nums, int k) { sort(nums.begin(),nums.end(),cmp);

2016-02-16 18:32:31 187

原创 313. Super Ugly Number LeetCode

题意:给你k个素数,让你求第n个丑数,臭数的定义是,只包含给定的素质因子的数。1是特殊的丑数。 题解:每个质素都有一个队列,相当于多个队列取一个最小的出队一样。class Solution { public: int nthSuperUglyNumber(int n, vector<int>& primes) { int k = primes.size();

2016-02-16 18:29:24 388

原创 80. Remove Duplicates from Sorted Array II LeetCode

题意:给出一个排好序的数组,让你使得数组每个元素最多出现2次,把多余的去掉。 题解:直接模拟。class Solution { public: int removeDuplicates(vector<int>& nums) { int ans = 0,count = 1; int n = nums.size(); if(n == 0) ret

2016-02-16 17:40:55 200

原创 129. Sum Root to Leaf Numbers LeetCode

题意:求二叉树所有根到叶子组成的数字之和。 题解:DFS。class Solution { public: int ans; void dfs(int num,TreeNode* root) { if(root->left == NULL && root->right == NULL) ans += num * 10 + root->

2016-02-16 17:35:59 198

原创 275. H-Index II LeetCode

题意:给你排好序的数组,让你求H-Index值。 题解:class Solution { public: int hIndex(vector<int>& citations) { int ans = 0; int n = citations.size(); for(int i = n - 1; i >= 0; i--) {

2016-02-16 17:28:17 229

原创 241. Different Ways to Add Parentheses LeetCode

题意:给出一个算术表达式,在合法的地方加括号改变运算顺序,求所有的合法添加括号方案得到的值。 题解:递归,遇到运算符的时候,递归的求左边能返回的值和右边能返回的值,然后做运算得到新的值。class Solution { public: vector<int> diffWaysToCompute(string input) { vector<int> ans;

2016-02-16 17:23:02 230

原创 162. Find Peak Element LeetCode

题意:寻找波峰。即num[i - 1] < num[i] > num[i + 1].返回任意一个即可。 题解:直接找。class Solution { public: int findPeakElement(vector<int>& nums) { int n = nums.size(); if(n == 1) return 0; if(n

2016-02-15 19:12:42 248

原创 199. Binary Tree Right Side View LeetCode

题意:求出二叉树每一层最右边的节点值。 题解:BFS./** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), ri

2016-02-15 19:08:48 248

原创 73. Set Matrix Zeroes LeetCode

题意:给出一个01矩阵,如果i行j列的格子是0,那么把i行和j列的所有格子全变成0.要求不使用额外空间。 题解:我们可以先找到第一个是0的格子,那么我们再把其他为0的格子信息存到i行j列里面,代码会有点长。class Solution { public: void setZeroes(vector<vector<int>>& matrix) { int row = -1,c

2016-02-15 18:56:46 205

原创 74. Search a 2D Matrix LeetCode

题意:在一个矩阵中搜索是否存在数target,矩阵中的数字每一行递增,每一行的第一个数字都比上一行的最后一个数字大。 题解:先二分搜在那一行,然后在那一行里面二分搜索是否存在target。class Solution { public: bool searchMatrix(vector<vector<int>>& matrix, int target) { int l =

2016-02-15 18:48:22 232

原创 173. Binary Search Tree Iterator LeetCode

题意:实现二叉树的迭代器。也就是实现hasnext,next。 题解:用stack去实现。/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left

2016-02-15 18:34:15 226

原创 77. Combinations LeetCode

题意:给出n和k,求所有的有1…n中选出k个数组成的集合。 题解:递归。class Solution { public: void dfs(int n,int k,int x,vector<int> v,vector<vector<int>>& ans) { if(k == 0) { ans.push_back(v);

2016-02-15 18:17:58 211

原创 89. Gray Code LeetCode

题意:求n位格雷码表示的十进制数。 题解:递归,这里用bitset方便储存。class Solution { void utils(bitset<32>& bits, vector<int>& result, int k){ if(k==0){ result.push_back(bits.to_ulong()); }

2016-02-14 19:29:21 236

原创 75. Sort Colors LeetCode

题意:给出一个只包含0,1,2三种数字的数组,让你把数组排好序。 题解:把0换到前面,把2换到后面。class Solution { public: void sortColors(vector<int>& nums) { int l = 0, r = nums.size() - 1; int zerox = 0; while(l <= r)

2016-02-14 19:22:20 221

原创 300. Longest Increasing Subsequence LeetCode

题意:最长公共子序列。 题解:dp。class Solution { public: int lengthOfLIS(vector<int>& nums) { int n = nums.size(); int dp[n]; int j = 0,k; for(int i = 0; i < n; i++) dp[i] = -0x3

2016-02-14 19:19:13 175

原创 289. Game of Life LeetCode

题意:生命游戏,给出你这一秒的生物存活情况,和游戏规则。让你给出下一秒生物存活的情况。规则1:如果一个活细胞周围只有1个或者1个以下的活细胞,那么这个细胞下一秒将会死。规则2:如果一个活细胞周围有2个或者3个活细胞,那么这个细胞下一秒将会活着。规则3:如果一个活细胞周围有4个或者4个以上活细胞,那么这个细胞下一秒将会死。规则4:如果一个死细胞周围有3个活细胞,那么这个死细胞下一秒将会活过来。 题解

2016-02-14 19:18:19 274

原创 11. Container With Most Water LeetCode

题意:有n个位置,给出每个位置的高度,选择两个位置和x轴形成贮水池,问贮水池最大面积是多少。 题解:用两个指针往中间移动,每移动一次就算一次面积,直到两个指针相遇,指针如何移动?哪边的高度小,哪边的指针就往中间移动一次。class Solution { public: int maxArea(vector<int>& height) { int l = 0,r = heig

2016-02-14 19:12:16 176

原创 48. Rotate Image LeetCode

题意:将矩阵顺时针选择90度。 题解:先把矩阵按左上角到右下角这条线对称交换(i,j)和(j,i)互换,再把交换后的矩阵按照中线旋转交换,也就是(i,j)和(i,n - j -1)交换。就能得到,不理解的话可以拿一张纸旋转一下就明白了。class Solution { public: void rotate(vector<vector<int>>& matrix) { in

2016-02-14 19:05:09 232

原创 59. Spiral Matrix II LeetCode

题意:把1到n一圈一圈的顺序写到矩形里。 题解:模拟。class Solution { public: vector<vector<int>> generateMatrix(int n) { vector<vector<int>> ma(n, vector<int>(n)); int t = 0,num = 1; while(t < (n +

2016-02-14 18:57:24 216

原创 216. Combination Sum III LeetCode

题意:给出n和k,表示你可以使用1-9中的n个数加和组成k,每种组合中1-9的每个数组只能使用一次。要求组合中数字按升序排序。 题解:递归搜索。class Solution { public: void dfs(int n,int k,int x,vector<int> v,vector<vector<int>>& ans) { if(n < 0 || k < 0)

2016-02-14 18:52:51 293

原创 64. Minimum Path Sum LeetCode

题意:给出一个NxM的矩阵,每个格子有一个非负数,从左上角走到右下角,每次只能往下或者往右走一格,求一条路径,使得走过的格子数字之和最小。 题解:dp。dp[i][j] 表示从0,0走到i行j列这个格子的最小数字和。 dp[i][j] = min(dp[i - 1][j],dp[i][j - 1]) + num[i][j].class Solution { public: int min

2016-02-14 18:48:06 234

原创 24. Swap Nodes in Pairs LeetCode

题意:给出一个链表,链表的节点成对交换,也就是1和2换,3和4换。。。n - 1和n换。 题解:模拟即可,增加一个虚拟头结点。class Solution { public: ListNode* swapPairs(ListNode* head) { ListNode *t = new ListNode(0); ListNode *temp;

2016-02-14 18:45:16 204

原创 46. Permutations LeetCode

题意:求1到n的全排列。 题解:STL之next_permutation.当然,可以自己递归实现。class Solution { public: vector<vector<int>> permute(vector<int>& nums) { vector<vector<int>> ans; sort(nums.begin(),nums.end());

2016-02-14 18:43:03 207

原创 121. Best Time to Buy and Sell Stock LeetCode

题意:给出每天股票的价格,只能进行一次交易,求最大收益。 题解:DP,minprice表示1…到i天价格最低的股票,maxprice表示1…i天最大收益。maxprice = max(maxprice,price[i] - minprice).class Solution { public: int maxProfit(vector<int>& prices) { int

2016-02-14 18:41:22 211

原创 62. Unique Paths LeetCode

题意:给出一个NxM的矩阵,一个人从左上角出发走到右下角,每次只能往右或者往下移动一格,问有多少种不同的走法。 题解:dp , dp[i][j]代表从0,0走到行为i列为j的格子的方案数。转移: dp[i][j] = dp[i - 1][j] + dp[i ][j - 1].class Solution { public: int uniquePaths(int m, int n) {

2016-02-14 18:37:18 205

原创 309. Best Time to Buy and Sell Stock with Cooldown LeetCode

题意:给出每天股票的价格,每次卖出股票之后得隔一天才能再买入,求最大收益。 题解:dp,buy[i]表示第i天买入股票得到的最大收益,sell[i]表示第i天卖出股票得到的最大收益。答案是sell[n]。转移:buy[i] = max(buy[i - 1],sell[i - 2] - prices[i]). sell[i] = max(sell[i - 1],buy[i - 1] + prices

2016-02-14 18:34:05 235

原创 153. Find Minimum in Rotated Sorted Array LeetCode

题意:给出一个排好序的数组,然后旋转未知数次,求数组中的最小元素。 题解:你会发现,不管旋转几次,最后要么是一段完整的递增数列,要么是两段递增数列。那么我们还是可以使用二分来求。class Solution { public: int findMin(vector<int>& nums) { int l = 0,r = nums.size() - 1; wh

2016-02-14 18:27:44 183

原创 22. Generate Parentheses LeetCode

题意:给出括号的数目,求所有合法的括号表示。 题解:递归,先递归左括号,再递归右括号。class Solution { public: void dfs(int l,int r,string res,vector<string>& ans) { if(l < 0 || r < 0 || l > r) return ; if(l == 0 && r =

2016-02-14 18:24:43 182

原创 230. Kth Smallest Element in a BST LeetCode

题意:在平衡二叉树中求第k大的元素。 题解:访问一个节点时,看左子树有几个节点,如果小于k - 1,往右子树递归搜索,等于k - 1,返回该节点,大于k - 1,往左子树递归搜索。class Solution { public: int calleft(TreeNode *root) { if(root == NULL) return 0; retu

2016-02-14 18:22:23 138

原创 53. Maximum Subarray LeetCode

题意:给一个数组,求最大连续子段和。 题解:DP,dp代表局部最大子段和,maxsum代表全局最大子段和。class Solution { public: int maxSubArray(vector<int>& nums) { int dp = 0,maxsum = -0x3f3f3f3f; int n = nums.size(); for

2016-02-14 18:18:26 154

原创 108. Convert Sorted Array to Binary Search Tree LeetCode

题意:把一个排好序的数组转换成一棵平衡二叉树。 题解:dfs建树,每次取中间作为分界点。class Solution { public: TreeNode* dfs(vector<int>& nums,int l,int r) { if(l > r) return NULL; int mid = (l + r) >> 1; TreeN

2016-02-14 18:16:16 153

原创 116. Populating Next Right Pointers in Each Node LeetCode

题意:给一棵二叉树,给每个节点增加一个right指针,指向同层的它的右边第一个节点。 题解:BFSclass Solution { public: void connect(TreeLinkNode *root) { if(!root) return ; queue<TreeLinkNode*> q; q.push(root);

2016-02-14 18:11:01 181

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除