
Leetcode
终南小道
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Leetcode206. 反转链表
class Solution {public: ListNode* reverseList(ListNode* head) { ListNode* pre=nullptr; ListNode* cur=head; while(cur){ ListNode* next=cur->next; cur->next=pre; pre=cur; cur.原创 2021-02-10 16:44:00 · 114 阅读 · 0 评论 -
Leetcode53.最大子序和&剑指 Offer 42. 连续子数组的最大和--动态规划
思路本题为动态规划,动态规划所求目标dp[i]为以元素nums[i]结尾的最大连续子序和;当dp[i-1]>0时,dp[i]=dp[i-1]+nums[i];当dp[i-1]$\leq$0时,dp[i]=nums[i];所以,状态转移方程为:dp[i]=max(0,dp[i−1])+nums[i]dp[i]=max(0,dp[i-1])+nums[i]dp[i]=max(0,dp[i−1])+nums[i]C++class Solution {public: int ma.原创 2021-02-09 17:44:38 · 116 阅读 · 0 评论 -
Leetcode209. 长度最小的子数组--双指针
class Solution {public: int minSubArrayLen(int s, vector<int>& nums) { int j = 0, sum = 0, len = INT_MAX; for(int i = 0; i<nums.size(); i++) { sum += nums[i]; while(sum >= s) { len = min(len, i - j .原创 2021-01-30 16:44:59 · 88 阅读 · 0 评论 -
Leetcode523. 连续的子数组和--前缀和、动态规划
#include<iostream>#include<vector>using namespace std;class Solution {public: bool checkSubarraySum(vector<int>& nums, int k) { vector<int> presum(nums.size()); presum[0]=nums[0]; for(int i=1; .原创 2021-01-29 20:48:46 · 120 阅读 · 0 评论 -
Leetcode560. 和为K的子数组--前缀和
#include<iostream>#include<vector>#include<unordered_map>using namespace std;class Solution {public: int subarraySum(vector<int>& nums, int k) { unordered_map<int, int> mymap; mymap[0]=1; .原创 2021-01-29 19:59:43 · 131 阅读 · 0 评论 -
Leetcode203. 移除链表元素
# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, next=None):# self.val = val# self.next = nextclass Solution: def removeElements(self, head: ListNode, val: int) -> ListNode: temp=List.原创 2021-01-28 17:42:51 · 85 阅读 · 0 评论 -
Leetcode80. 删除排序数组中的重复项 II--双指针
C++代码:class Solution {public: int removeDuplicates(vector<int>& nums) { int i=0, count=0, val=nums[0]; for (int j=0; j<nums.size(); j++){ if(nums[j]==val){ count++; } ..原创 2021-01-28 16:28:45 · 78 阅读 · 0 评论 -
Leetcode40. 组合总和 II--回溯算法
#include<iostream>#include<vector>#include<algorithm>using namespace std;class Solution {private: vector<vector<int>> ans; vector<int> path;public: void backtracking(vector<int>& candidates,.原创 2021-01-25 14:16:14 · 111 阅读 · 0 评论 -
Leetcode216. 组合总和 III--回溯算法
回溯算法三步法1. 确定递归函数参数 本题需要一维数组path来存放符合条件的结果,二维数组result来存放结果集。定义path 和 result为全局变量。接下来还需要如下参数:targetSum(int)目标和,也就是题目中的n。k(int)就是题目中要求k个数的集合。sum(int)为已经收集的元素的总和,也就是path里元素的总和。startIndex(int)为下一层for循环搜索的起始位置。代码:vector<vector<int>> re.原创 2021-01-25 13:25:35 · 219 阅读 · 0 评论 -
Leetcode463. 岛屿的周长--遍历
#include<iostream>#include<vector>#include<cstdlib>using namespace std;class Solution {public: int dx[4]={0, 1, 0, -1}; int dy[4]={1, 0, -1, 0}; int islandPerimeter(vector<vector<int>>& grid) { .原创 2021-01-24 15:57:58 · 126 阅读 · 0 评论 -
Leetcode695. 岛屿的最大面积--深度优先搜索
#include<iostream>#include<vector>#include<cstdlib>#include<time.h>using namespace std;class Solution {public: int dfs(vector<vector<int>>& grid, int i, int j){ if (i<0 || j<0 || i == grid..原创 2021-01-23 22:17:06 · 115 阅读 · 0 评论 -
Leetcode200. 岛屿数量--深度优先搜索
class Solution {public: void dfs(vector<vector<char>>& grid, int i, int j){ //dfs出现1时保证把以该起点出发的所有发现的上下左右为1的值改为0; if(i<grid.size()&&j<grid[i].size()&&grid[i][j]=='1') grid[i][j] = '0'; //是1修改为0,再找其上下左右周围为1.原创 2021-01-23 21:47:50 · 94 阅读 · 0 评论 -
Leetcode130. 被围绕的区域--深度优先搜索
.对于每一个边界上的 O,我们以它为起点,标记所有与它直接或间接相连的字母 O;.最后我们遍历这个矩阵,对于每一个字母:.如果该字母被标记过,则该字母为没有被字母 X 包围的字母 O,我们将其还原为字母 O;.如果该字母没有被标记过,则该字母为被字母 X 包围的字母 O,我们将其修改为字母 X。#include<iostream>#include<vector>#include<cstdlib>#include<time.h>usi..原创 2021-01-23 17:00:35 · 122 阅读 · 0 评论 -
Leetcode213. 打家劫舍 II--动态规划
class Solution {public: int rob(vector<int>& nums) { if(nums.size()==1) return nums[0]; int n=nums.size(); vector<int>a(n+1),b(n+1); for (int i=2; i<n+1; i++){ a[i]=max(a[i-1].原创 2021-01-20 14:15:42 · 139 阅读 · 0 评论 -
Leetcode152. 乘积最大子数组--动态规划
当前位置的最优解未必是由前一个位置的最优解转移得到的。当前位置如果是一个负数的话,那么我们希望以它前一个位置结尾的某个段的积也是个负数,这样就可以负负得正,并且我们希望这个积尽可能「负得更多」,即尽可能小。如果当前位置是一个正数的话,我们更希望以它前一个位置结尾的某个段的积也是个正数,并且希望它尽可能地大。于是这里我们可以再维护一个 fmin(i)f_{\min}(i)fmin(i),它表示以第 i 个元素结尾的乘积最小子数组的乘积,那么我们可以得到这样的动态规划转移方程:fmax(i)=maxi=.原创 2021-01-20 11:12:00 · 91 阅读 · 0 评论 -
Leetcode64. 最小路径和--动态规划
当row=0且column>0时,dp[0][column]=dp[0][column−1]+grid[0][column]dp[0][column]=dp[0][column-1]+grid[0][column]dp[0][column]=dp[0][column−1]+grid[0][column]当column=0且row>0时,dp[row][0]=dp[row−1][0]+grid[row][0]dp[row][0]=dp[row-1][0]+grid[row][0]dp[row..原创 2021-01-05 11:11:09 · 95 阅读 · 0 评论 -
Leetcode55. 跳跃游戏--贪心算法,回溯算法
贪心算法局部最优解:每次取最大跳跃步数(取最大覆盖范围),整体最优解:最后得到整体最大覆盖范围,看是否能到终点。局部最优推出全局最优,找不出反例,试试贪心!class Solution {public: bool canJump(vector<int>& nums) { int cover=0; if (nums.size()==1) return true; for (int i=0; i<=cover;i++){.原创 2021-01-05 10:20:36 · 205 阅读 · 0 评论 -
Leetcode257. 二叉树的所有路径--深度优先搜索
递归class Solution {public: vector<string> paths; void construct_paths(TreeNode* root, string path, vector<string>& paths) { if (root != nullptr) { path += to_string(root->val); if (root->left .原创 2020-12-31 12:00:46 · 95 阅读 · 0 评论 -
Leetcode113. 路径总和 II、剑指 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-12-31 11:41:42 · 97 阅读 · 0 评论 -
Leetcode78. 子集--回溯算法
#include<iostream>#include<vector>using namespace std;class Solution {private: vector<vector<int>> result; vector<int> path; void backtracking(vector<int>& nums, int startIndex) { result.pu.原创 2020-12-31 11:08:17 · 113 阅读 · 0 评论 -
Leetcode131. 分割回文串--回溯算法
是分割字符串,不是随机组合#include<iostream>#include<vector>#include<string>using namespace std;//分割字符串,不是组合class Solution {private: vector<vector<string>> result; vector<string> path; // 放已经回文的子串 void backtrac..原创 2020-12-31 10:05:29 · 104 阅读 · 0 评论 -
Leetcode剑指offer38. 字符串的排列--回溯算法
#include<iostream>#include<vector>#include<string>#include <algorithm> using namespace std;class Solution {public: vector<string> ans; string temp; void backtrack(string& s, vector<bool>& use.原创 2020-12-30 21:17:22 · 82 阅读 · 0 评论 -
Leetcode47. 全排列 II
#include<iostream>#include<vector>#include <algorithm> using namespace std;class Solution {public: vector<vector<int>> ans; vector<int> temp; void backtrack(vector<int>& nums, vector<bool.原创 2020-12-30 16:07:59 · 79 阅读 · 0 评论 -
Leetcode46. 全排列--回溯算法
#include<iostream>#include<vector>using namespace std;class Solution {public: vector<vector<int>> ans; vector<int> temp; void backtrack(vector<int>& nums, vector<bool>& used){ if .原创 2020-12-30 15:16:42 · 112 阅读 · 0 评论 -
Leetcode77. 组合--回溯算法
回溯模板void backtracking(参数) { if (终止条件) { 存放结果; return; } for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) { 处理节点; backtracking(路径,选择列表); // 递归 回溯,撤销处理结果 }}#include<iostream>#include<vector>using .原创 2020-12-30 11:58:27 · 104 阅读 · 0 评论 -
Leetcode20. 有效的括号
class Solution {public: bool isValid(string s) { int n = s.size(); if (n%2==1){ return false; } unordered_map<char, char> mymap={{')', '('}, {'}', '{'}, {']', '['}}; stack<char> st; .原创 2020-12-29 19:50:43 · 151 阅读 · 0 评论 -
Leetcode17. 电话号码的字母组合--深度优先搜索,回溯算法,递归
#include<iostream>#include<vector>#include<string>#include <unordered_map>using namespace std;class Solution {public: vector<string> letterCombinations(string digits) { vector<string> combinations; .原创 2020-12-29 18:55:45 · 111 阅读 · 0 评论 -
Leetcode242. 有效的字母异位词
class Solution {public: bool isAnagram(string s, string t) { sort(s.begin(), s.end()); sort(t.begin(), t.end()); string a=s; string b=t; return a==b; }};原创 2020-12-29 11:44:15 · 89 阅读 · 0 评论 -
Leetcode49. 字母异位词分组
由于互为字母异位词的两个字符串包含的字母相同,因此对两个字符串分别进行排序之后得到的字符串一定是相同的,故可以将排序之后的字符串作为哈希表的键。\class Solution {public: vector<vector<string>> groupAnagrams(vector<string>& strs) { unordered_map<string, vector<string>> mp; .原创 2020-12-29 11:27:28 · 87 阅读 · 0 评论 -
Leetcode6. Z 字形变换
思路:按照与逐行读取 Z 字形图案相同的顺序访问字符串。首先访问 行 0 中的所有字符,接着访问 行 1,然后 行 2,依此类推…对于所有整数 k,行 0 中的字符位于索引k(2⋅numRows−2)k(2 \cdot \text{numRows} - 2)k(2⋅numRows−2) 处;行 numRows−1numRows−1numRows−1 中的字符位于索引 k(2⋅numRows−2)+numRows−1k(2⋅numRows−2)+numRows−1k(2⋅numRows−2)+.原创 2020-12-29 10:47:47 · 94 阅读 · 0 评论 -
Leetcode剑指 Offer 49. 丑数&264. 丑数 II
class Solution {public: int nthUglyNumber(int n) { if (n < 1) {return INT_MIN;} int two = 0, three = 0, five = 0; vector<int> dp(n); dp[0] = 1; for (int i = 1; i < n; ++i) { int t1 = d.原创 2020-11-28 11:30:30 · 190 阅读 · 0 评论 -
Leetcode79. 单词搜索&&剑指 Offer 12. 矩阵中的路径--深度优先搜索
class Solution {public: bool exist(vector<vector<char>>& board, string word) { rows = board.size(); cols = board[0].size(); for(int i = 0; i < rows; i++) { for(int j = 0; j < cols; j++) { .原创 2020-11-27 19:39:34 · 145 阅读 · 0 评论 -
Leetcode200. Number of Islands--深度优先搜索、广度优先搜索
思路:遍历过程中将字符为1的位坐标点处的值置为0class Solution {private: void dfs(vector<vector<char>>& grid, int r, int c) { int row=grid.size(); int col=grid[0].size(); grid[r][c]='0'; if (r - 1 >= 0 && grid[.原创 2020-11-27 16:45:33 · 100 阅读 · 0 评论 -
Leetcode15. 三数之和--双指针
class Solution {public: vector<vector<int>> threeSum(vector<int>& nums) { vector<vector<int>> result; sort(nums.begin(),nums.end()); for(int i=0;i<nums.size() && nums[i]<.原创 2020-11-27 13:48:54 · 79 阅读 · 0 评论 -
Leetcode1. 两数之和--哈希表、暴力法
暴力法:class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { int i,j; for(i=0;i<nums.size()-1;i++) { for(j=i+1;j<nums.size();j++) { if(nums[i]+n.原创 2020-11-27 11:28:26 · 116 阅读 · 0 评论 -
Leetcode11. 盛最多水的容器--双指针
最多的水实为垂线段与坐标轴围成的面积class Solution {public: int maxArea(vector<int>& height) { int l=0, r=height.size()-1; int ans=0; while (l<r) { int temp=min(height[r], height[l])*(r-l); ans=max(.原创 2020-11-27 10:54:37 · 86 阅读 · 0 评论 -
Leetcode50.Pow(x, n)&&剑指 Offer 16. 数值的整数次方--递归快速幂
class Solution {public: double myPow(double x, int n) { if(n==0) return 1; //考虑到负数右移永远是负数, if(n==-1) return 1/x; if(n&1) return myPow(x*x, n>>1)*x; else return myPow(x*x, n>>1); }};...原创 2020-11-25 13:42:14 · 193 阅读 · 0 评论 -
Leetcode74. 搜索二维矩阵
class Solution {public: bool searchMatrix(vector<vector<int>>& matrix, int target) { if(matrix.size()==0) return false; for (int i=0; i<matrix.size();i++) { for (int j=0; j<matrix[0].size(); j.原创 2020-11-25 13:12:50 · 87 阅读 · 0 评论 -
Leetcode179. 最大数--排序
思路:#include<iostream>#include<vector>#include<string>#include<algorithm>using namespace std;bool cmp(string a, string b){ return a+b > b+a;}class Solution {public:string largestNumber(vector<int>& nums) .原创 2020-11-25 11:07:32 · 142 阅读 · 0 评论 -
Leetcode面试题 17.14. 最小K个数--排序
class Solution {public: vector<int> smallestK(vector<int>& arr, int k) { if (arr.size()==0 || k==0) return {}; vector<int> ans; sort(arr.begin(), arr.end()); for (int i=0; i<k;i++) { .原创 2020-11-23 20:28:27 · 162 阅读 · 0 评论