- 博客(33)
- 收藏
- 关注
原创 Leetcode 46. 全排列
使用next_permutation函数class Solution {public: vector<vector<int>> permute(vector<int>& nums) { vector<vector<int>> ans; sort(nums.begin(), nums.end()); do { ans.p
2018-04-29 09:27:48 216 4
原创 Leetcode 45. 跳跃游戏 II
记录n{0…}跳的最大长度,当最大长度大于等于最后位置时,n就是所求值class Solution {public: int jump(vector<int>& nums) { int L = 0, R = 0, n = 0; while (R < nums.size() - 1) { int M = R; f
2018-04-29 09:27:16 257
原创 Leetcode 44. 通配符匹配
和leetcode10. 正则表达式匹配形似 动态规划bool dp[10005][10005];class Solution {public: bool isMatch(string s, string p) { dp[0][0] = true;//s无字符,p无字符 dp[0][1] = p[0] == '*';//s无字符,p有一个字符
2018-04-29 09:11:26 587
原创 Leetcode 43. 字符串相乘
计算步骤: 123 *456 A[0]=3*6=18 A[1] =2*6+3*5=27 A[2] =2*5+3*4+6*1=28 A[3]=1*5+4*2=13 A[4]=1*4=4 A[5]=A[6]=…=0 A[0]=8 A[1]=27+1=28 A[1]=8 A[2]=28+2=30 A[2]=0 A[3]=13+3=16 A[3]=6 A[4]
2018-04-28 10:54:38 579
原创 Leetcode 42. 接雨水
维护每个位置的左侧最大值L{}和右侧最大值R{} 若R[i]>height[i]且L[i]>height[i],k位置积水,且积水量为min(R[i], L[i]) - height[i]const int maxn = 100005;class Solution {public: int L[maxn], R[maxn]; int trap(vector<int>& heig
2018-04-28 09:27:11 487 2
原创 Leetcode 41. 缺失的第一个正数
借用原数组,使原数组尽量变成nums[i]=i+1的形式 如果遇到重复元素,则把其中一个变成0【不能构成的形式】 保证遍历到k位置nums{0…k}要么是nums[i]=i+1,要么nums[i]不存在对应的形式class Solution {public: int firstMissingPositive(vector<int>& nums) { f...
2018-04-28 09:14:05 234
原创 Leetcode 40. 组合总和 II
和Leetcode39一样,只是从原来的无限个一样的数到有限个一样的数class Solution {public: vector<vector<int>> ans; vector<int> val; void dfs(vector<int>& candidates, int target, int index) { if (target == 0) {
2018-04-27 16:18:24 241 2
原创 Leetcode 39. 组合总和
暴力深搜class Solution {public: vector<vector<int>> ans; vector<int> val; void dfs(vector<int>& candidates, int target, int index) { if (target == 0) { ans.push_back(val);
2018-04-27 16:01:31 176
原创 Leetcode 38. 报数
难在理解题意,n+1个数是对第n个数的报数 比如11124445,报数就是3个1一个2三个4一个5【31123415】class Solution {public: string countAndSay(int n) { string s = "1", t; while (--n) { char val = s[0]; int n
2018-04-26 11:47:27 165
原创 Leetcode 37. 解数独
暴力可过class Solution {public: bool hang[9][9] = {}, lie[9][9] = {}, ge[9][9] = {}; bool solve(vector<vector<char>>& board) { for (int i = 0; i<9; ++i) for (int j = 0; j < 9; ++
2018-04-26 10:59:07 484 3
原创 Leetcode 36. 有效的数独
按题意,暴力解决class Solution {public: bool isValidSudoku(vector<vector<char>>& board) { bool hang[9][9] = {}, lie[9][9] = {}, ge[9][9] = {}; char x; for (int i = 0; i < 9; ++i) {
2018-04-25 10:48:27 492
原创 Leetcode 35. 搜索插入位置
(l,r]找lowclass Solution {public: int searchInsert(vector<int>& nums, int target) { vector<int> ans; int l = -1, r = (int)nums.size()-1; while (l < r) { int mid = (l + r+1) >> 1
2018-04-25 10:40:57 186
原创 Leetcode 34. 搜索范围
两次二分查找,第一次找low,第二次找high [l,r)找high和(l,r]找lowclass Solution {public: vector<int> searchRange(vector<int>& nums, int target) { vector<int> ans; if (nums.empty()) { ans.p
2018-04-24 09:47:22 482
原创 Leetcode 33. 搜索旋转排序数组
序列为两个升序,给后面的升序(都小于第一个元素)加一个权值,使序列变为一个升序,然后二分查找class Solution {public:#define val(x) (x<nums[0]? x+0x3f3f3f3f:x) int search(vector<int>& nums, int target) { int l = 0, r = nums.size() - 1;
2018-04-24 09:25:22 1585 7
原创 Leetcode 32. 最长有效括号
每次右括号的时候, 如果匹配判断以这个右括号为右端的最大长度 如果不匹配,判断以右括号左边字符为右端的最大长度 答案就是这些最大长度的最大值class Solution {public: int longestValidParentheses(string s) { int ans = 0; vector<int> A; A.push_
2018-04-23 08:34:30 156
原创 Leetcode 31. 下一个排列
调用函数class Solution {public: void nextPermutation(vector<int>& nums) { next_permutation(nums.begin(), nums.end()); }};自己写class Solution {public: void nextPermutation(vector<int>&
2018-04-23 08:20:28 318
原创 Leetcode 30. 与所有单词相关联的字串
利用kmp记录words中每一个字符串在s中的所有匹配位置 为防止超内存,对words进行排序,并进行编号(相同的字符串为同一id),并记录每一id的出现次数 然后暴力搜索s串每一个位置是否符合要求class Solution {public: int nextval[100005]; vector<int> A[100005]; void get_nextval(st
2018-04-22 10:56:47 1752
原创 Leetcode 29. 两数相除
利用移位和减法做 首先被除数-除数的2^t倍【使被除数符号不发生变化的最高t】,把2^t保存 然后新的被除数-…… 为防止溢出,都用负数进行运算class Solution {public: const int M = 0x7fffffff, m = 0x80000000; int divide(int dividend, int divisor) { if
2018-04-22 09:38:09 473
原创 Leetcode 28. 实现strStr()
KMP 注意nextval数组的长度,如果过短会执行错误(数组越界)class Solution {public: int nextval[100005]; void get_nextval(string s) { int i = 0, x = -1; nextval[i] = x; while (i < s.size()) {
2018-04-21 09:29:05 227
原创 Leetcode 27. 移除元素
简单题class Solution {public: int removeElement(vector<int>& nums, int val) { int ans = -1; if (nums.empty()) return 0; for (auto x : nums) if (x != val) nums[++an
2018-04-21 09:17:51 206
原创 Leetcode 26. 删除排序数组中的重复项
简单题class Solution {public: int removeDuplicates(vector<int>& nums) { int ans = 0; if (nums.empty()) return 0; for (auto x : nums) if (x != nums[ans]) nums[++ans
2018-04-20 10:09:39 108
原创 Leetcode 25. k个一组翻转链表
指针的next反转一下,再把链表接起来 如1->2->3->4->5反转2->3->4的时候 先1 2<-3<-4 5 再1->4和2->5/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x),
2018-04-20 09:52:57 1170
原创 Leetcode 24. 两两交换链表中的节点
pl代表左右交换,左的前驱结点指针,pr右的前驱结点指针,r就是右结点指针/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/class Soluti
2018-04-18 13:38:00 245
原创 Leetcode 23. 合并K个排序链表
和Leetcode 21. 合并两个有序链表类似 用堆排序每次选一个最小的,然后把这个最小的下一个元素加入堆中(可用priority_queue)/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x
2018-04-18 13:14:04 315
原创 Leetcode 22. 括号生成
暴力深搜class Solution {public: vector<int> sta; vector<string> ans; string s; void dfs(int n, int M) { if (!n) { ans.push_back(s); for (int i = s.size(); i
2018-04-18 12:09:22 116
原创 Leetcode 21. 合并两个有序链表
/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/class Solution {public: ListNode * mergeTwoL
2018-04-18 11:56:10 114
原创 Leetcode 20. 有效的括号
维护一个栈,然后……class Solution {public: bool isValid(string s) { vector<int> A; for (auto x : s) { switch (x) { case '(': A.push_back(x);
2018-04-17 10:02:20 225
原创 Leetcode 19. 删除链表的倒数第N个节点
简单题/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/class Solution {public: ListNode * remove
2018-04-17 09:50:16 163
原创 PAT 1022. Werewolf (35)
暴力……我还想再优化点,试着提交一下居然过了#include<iostream>#include<vector>#include<cmath>using namespace std;#pragma warning(disable:4996)int N, M, L, A[105], lie, lie_wolf, lie2, is_wolf[105];vector<int> ans, rel
2018-04-16 22:19:44 1789
原创 Leetcode 18. 四数之和
和三数之和类似……class Solution {public: vector<vector<int>> fourSum(vector<int>& nums, int target) { vector<int> tmp; vector<vector<int>> ans; sort(nums.begin(), nums.end());
2018-04-16 17:34:26 221
原创 Leetcode 17. 电话号码的字母组合
简单题,暴力枚举即可class Solution {public: vector<string> ans; string s[8] = { "abc","def","ghi","jkl","mno","pqrs","tuv","wxyz" }; void dfs(int index, string &str, string &digits) { if (in
2018-04-16 17:18:40 1071
原创 Leetcode 16. 最接近的三数之和
和Leetcode15题类似class Solution {public: int threeSumClosest(vector<int>& nums, int target) { int ans = 99999999 + target, kk; sort(nums.begin(), nums.end()); for (int i = 0;
2018-04-15 16:48:15 155
原创 Leetcode 15. 三数之和
注意有相同的数出现的情况,需要跳过class Solution {public: vector<vector<int>> threeSum(vector<int>& nums) { vector<int> tmp; vector<vector<int>> ans; sort(nums.begin(), nums.end());
2018-04-15 11:09:46 477
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人