- 博客(61)
- 收藏
- 关注
原创 LeetCode 45. Jump Game II
描述问最少多少次可以走到数组最后解决用一个数记录当前索引号,然后遍历当前的索引范围,得到下一次遍历的最大索引号class Solution {public: int jump(vector<int>& nums) { int i = 0; int length = nums.size(); int max_index_now = 0, te
2016-11-30 18:08:37 273
原创 LeetCode 55. Jump Game
描述判断从数组的最开始位置,能否移动到最后位置解决记录能走到的最大步长,与数组的长度比较即可class Solution {public: bool canJump(vector<int>& nums) { int i = 0; int length = nums.size(); if (length == 1) re
2016-11-30 16:57:14 210
原创 LeetCode 201. Bitwise AND of Numbers Range
描述给出范围m与n,求范围内的所有数求与的结果解决求出m与n的公共位即可class Solution {public: int rangeBitwiseAnd(int m, int n) { int cnt = 0; while (m != n) { m >>= 1; n >>= 1;
2016-11-29 11:07:35 244
原创 LeetCode 275. H-Index II
描述给出h引用的定义,求h的值解决利用二分即可。class Solution {public: int hIndex(vector<int>& citations) { int length = citations.size(); int l = 0, r = length; while (l < r) {
2016-11-29 10:25:18 277
原创 LeetCode 274. H-Index
描述给出一个数组,给了一个h引用的定义,求这个h解决先排序,然后遍历就完了class Solution {public: int hIndex(vector<int>& citations) { sort(citations.begin(), citations.end()); int length = citations.size(); i
2016-11-28 19:48:58 320
原创 LeetCode 189. Rotate Array
描述对于一个数组,右移k位解决k可能大于数组长度,所以要对k求余,《编程珠玑》上的问题,先对整体旋转一次,然后再根据k分别旋转两个小的部分class Solution {public: void rotate(vector<int>& nums, int k) { int length = nums.size(); k %= length;
2016-11-28 18:49:42 223
原创 LeetCode 290. Word Pattern
class Solution {public: bool wordPattern(string pattern, string str) { stringstream in(str); string tmp; vector<string> zz; while (in >> tmp) {
2016-11-27 17:15:23 299
原创 LeetCode 155. Min Stack
描述实现栈解决两个栈来模拟class MinStack {public: stack<int> s1, s2; MinStack() { } void push(int x) { s1.push(x); if (s2.empty() || x <= s2.top()) s2.push(x); } vo
2016-11-27 16:37:31 271
原创 LeetCode 190. Reverse Bits
描述把一个数的二进制表示逆转后,求逆转后的值解决用bitset解决,然后在循环里面移位。最后返回时,再判断最后一位的值。class Solution {public: uint32_t reverseBits(uint32_t n) { bitset<32> zz(n); string tmp = zz.to_string(); //cout
2016-11-26 13:13:11 346
原创 LeetCode 205. Isomorphic Strings
描述判断两个字符串是否同构解决记录每个字符前一次出现的位置,判断即可。注意不要初始化vector为0,因为字符从索引号为0开始遍历的。class Solution {public: bool isIsomorphic(string s, string t) { int length = s.size(); if (length == 0)
2016-11-26 12:32:17 362
原创 LeetCode 14. Longest Common Prefix
描述找出所有字符串的最长公共前缀解决遍历所有的字符串class Solution {public: string longestCommonPrefix(vector<string>& strs) { int length = strs.size(); if (length == 0) return ""; strin
2016-11-25 14:38:33 300
原创 LeetCode 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) {
2016-11-25 14:09:43 509
原创 LeetCode 82. Remove Duplicates from Sorted List II
描述删除链表中所有重复节点解决遍历,遇到相同的就一直加加。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solutio
2016-11-24 18:37:51 362
原创 LeetCode 203. Remove Linked List Elements
描述删除链表中与目标值相同的节点解决用一个临时节点,然后遍历整个链表即可/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class
2016-11-24 16:24:03 237
原创 LeetCode 200. Number of Islands
描述给出一个矩阵,找独立的块有多少解决bfs遍历class Solution {public: int numIslands(vector<vector<char>>& grid) { int dir[4][2] = {{1,0}, {0, 1}, {-1, 0}, {0, -1}}; queue<pair<int, int>> que; i
2016-11-23 15:40:18 325
原创 LeetCode 172. Factorial Trailing Zeroes
描述求n!末尾零的数量解决只要求到能分解成多少个5即可,偶数的数量足够class Solution {public: int trailingZeroes(int n) { int cnt = 0; while (n) { n /= 5; cnt += n; }
2016-11-23 15:06:28 489
原创 LeetCode 117. Populating Next Right Pointers in Each Node II
描述把每层的节点连接起来,要求O(1)的空间解决不会,看了这个算法写的,利用一个辅助节点记录每一层的开始节点/** * Definition for binary tree with next pointer. * struct TreeLinkNode { * int val; * TreeLinkNode *left, *right, *next; * TreeLinkNode(
2016-11-22 16:35:35 436
原创 LeetCode 116. Populating Next Right Pointers in Each Node
描述给出一棵树,把每一层的节点连接起来解决利用queue存每一层的节点,然后遍历即可。/** * Definition for binary tree with next pointer. * struct TreeLinkNode { * int val; * TreeLinkNode *left, *right, *next; * TreeLinkNode(int x) : va
2016-11-22 13:43:41 382
原创 LeetCode 125. Valid Palindrome
描述判断字符串是否是回文字符串解决首位向中间遍历class Solution {public: bool isPalindrome(string s) { int length = s.size(); if (length == 0) return true; int i = 0, j = length - 1;
2016-11-21 15:54:43 274
原创 LeetCode 215. Kth Largest Element in an Array
描述找出第k大的数解决利用multiset即可class Solution {public: int findKthLargest(vector<int>& nums, int k) { multiset<int, greater<int>> res; for (auto &val : nums) res.insert(val);
2016-11-21 13:38:14 208
原创 LeetCode 74. Search a 2D Matrix
描述在一个有序矩阵里面找一个数解决因为矩阵每行的行首大于上一行的末尾,可以当成一维的数组来二分搜索即可class Solution {public: bool searchMatrix(const vector<vector<int>>& matrix, int target) { int r = matrix.size(); if (!r)
2016-11-20 11:31:25 310
原创 LeetCode 78. Subsets
描述给出一个数组,求出所有的子数组解决高中的排列组合问题,记录数组的长度为n,则可以取的组合为C(n, 0), C(n, 1), C(n,2)直到C(n,n),又因为C(n, 0) + C(n, 1) + ....+C(n, n) = 2 ^ n,即判断每个数是否取出来class Solution {public: vector<vector<int>> res; vector<i
2016-11-20 10:51:17 292
原创 LeetCode 64. Minimum Path Sum
描述找从左上到右下的路径,要求路径和最短解决动态规划问题class Solution {public:int minPathSum(vector<vector<int>>& grid) { int r = grid.size(); if (r == 0) return 0; int l = r ? grid[0].size() : 0; vecto
2016-11-20 00:56:54 313
原创 LeetCode 22. Generate Parentheses
描述给出数字n,问生成合法的n对匹配括号,可以有多少种解决记录左括号的出现次数l,与右括号出现次数r。l < n,则加一个左括号,l + 1;若l > r,则加一个右括号,r + 1。class Solution {public: vector<string> res; int num; vector<string> generateParenthesis(int n) {
2016-11-20 00:15:00 284
原创 LeetCode36. Valid Sudoku
描述判断该数独是否有效解决我想的是分别遍历行列与9个方块class Solution {public: bool isValidSudoku(vector<vector<char>>& board) { uint8_t a[10] = {0}; uint8_t b[10] = {0}; for (int i = 0; i < 9; ++i)
2016-11-18 15:02:47 260
原创 LeetCode 59. Spiral Matrix II
描述螺旋形遍历矩阵,把1~n^2的值依次序放在矩阵中解决遍历class Solution {public: vector<vector<int>> generateMatrix(int n) { vector<vector<int>> res(n, vector<int>(n, 0)); int st_r = 0, ed_r = n - 1;
2016-11-18 09:22:13 328
原创 LeetCode 54. Spiral Matrix
描述给出一个m * n的矩阵,用螺旋的方式遍历该矩阵解决用四个数来标识起始位置,按照顺序遍历即可class Solution {public: vector<int> spiralOrder(vector<vector<int>>& matrix) { int row = matrix.size(); int length = row ? matrix[0]
2016-11-17 13:24:07 254
原创 LeetCode 28. Implement strStr()
描述实现strStr()函数解决遍历class Solution {public: int strStr(string haystack, string needle) { int length2 = needle.size(); int length1 = haystack.size(); if (length1 == 0 && lengt
2016-11-17 12:46:21 292
原创 LeetCode 12. Integer to Roman
描述把数字转换成罗马数字解决class Solution {public: string intToRoman(int num) { int arr[13] = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5,4, 1}; string str[13] = {"M", "CM", "D", "CD", "C",
2016-11-16 14:19:23 280
原创 LeetCode 53. Maximum Subarray
描述求最大的连续子数组和解决遍历。class Solution {public: int maxSubArray(vector<int>& nums) { int length = nums.size(); int temp = -0xffff; int res = 0; vector<int> arr(length + 1,
2016-11-16 12:51:17 228
原创 LeetCode 52. N-Queens II
描述对于n皇后,答案是多少种解决利用二进制来标记class Solution {public: int sum{0}; int most_num; int totalNQueens(int n) { most_num = (1 << n) - 1; rec(0, 0, 0); return sum; } voi
2016-11-15 18:10:10 238
原创 LeetCode 51. N-Queens
描述n皇后问题解决递归,回溯class Solution {public:vector<vector<string>> solveNQueens(int n) { vector<vector<string>> res; vector<string> str(n, string(n, '.')); function<void(int, int)> rec = [&](int
2016-11-15 17:18:19 295
原创 LeetCode 34. Search for a Range
描述找出目标数值在数组中的范围,数组是有序的解决利用lower_bound找下边界,upper_bound找上边界class Solution {public: vector<int> searchRange(vector<int>& nums, int target) { int length = nums.size(); int st = lower_b
2016-11-14 17:21:29 295
原创 LeetCode 47. Permutations II
描述找出所有独一无二的排列解决利用next_permutaion和uniqueclass Solution {public: vector<vector<int>> permuteUnique(vector<int>& nums) { sort(nums.begin(), nums.end()); vector<vector<int>> res;
2016-11-14 16:49:05 360
原创 LeetCode 33. Search in Rotated Sorted Array
描述找出循环数组中是否存在目标值解决二分搜索class Solution {public: int search(vector<int>& nums, int target) { int l = 0, r = nums.size() - 1; while (l <= r) { int m = l + (r - l) /
2016-11-13 13:39:20 255
原创 LeetCode 142. Linked List Cycle II
描述找到环的起始节点解决若存在环,则从头节点和相遇点每次走一步,一定会在起始点处相遇。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */
2016-11-13 11:26:28 261
原创 LeetCode 199. Binary Tree Right Side View
描述给出一棵二叉树,找出从右侧看的时候所有的节点值解决用queue存节点,每次取每一层的最后一个节点。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) :
2016-11-12 16:01:05 282
原创 LeetCode 416. Partition Equal Subset Sum
描述问数组是否可以分成相等的两半解决动态规划,class Solution {public: bool canPartition(vector<int>& nums) { int sum = 0; for (auto it : nums) { sum += it; } if (sum &
2016-11-12 15:31:04 339
原创 LeetCode 213. House Robber II
描述给出一个数组,求出一组子集,该子集中各个元素不相邻,求和最大的子集解决动态规划,定义res[i]: 表示前i个数构成的最大子集和,状态转移方程:res[i] = max(res[i - 2] + nums[i], res[i - 1]);class Solution {public: int rob(vector<int>& nums) { int length = n
2016-11-11 10:19:25 275
原创 LeetCode 198. House Robber
描述给出一个数组,求出一组子集,该子集中各个元素不相邻,求和最大的子集解决动态规划,定义res[i]: 表示前i个数构成的最大子集和,状态转移方程:res[i] = max(res[i - 2] + nums[i], res[i - 1]);class Solution {public: int rob(vector<int>& nums) { int length = n
2016-11-11 09:48:35 238
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人