leetcode打卡
文章平均质量分 75
ZZcppc
这个作者很懒,什么都没留下…
展开
-
深度优先搜索(DFS)
深度优先搜索(DFS)695.岛屿的最大面积leetcode695解题思路:求地图的连通性、走迷宫问题,都可以通过DFS求解,类似的问题还有求岛屿数量、岛屿周长等。常规套路,定义方向数组dir[][],有时是八个方向,有时候是四个方向。八个方向:上下左右加对角dir[8][2]={0,-1,-1,0,0,1,1,0,1,1,1,-1,-1,1,-1,-1}四个方向:dir[4][2]={0,-1,-1,0,0,1,1,0,}class Solution {public: i原创 2020-11-24 17:20:05 · 301 阅读 · 0 评论 -
Leetcode 每日一题打卡系列
Leetcode 每日一题打卡系列03.14 设计哈希映射(706)class MyHashMap {public: /** Initialize your data structure here. */ vector<list<pair<int,int>>>data; const static int base=769; static int hash(int key){ return key%base; }原创 2021-03-18 13:44:20 · 285 阅读 · 0 评论 -
单调栈分析
单调栈解决问题:解决最近邻较小或较大的问题;滑动窗口最大或最小值用途: 可以以 O(1)的时间复杂度得知某个位置左右两侧比他大(或小)的数的位置,当你需要高效率获取某个位置左右两侧比他大(或小)的数的位置的的时候就可以用到单调栈。求解数组中元素右边第一个比它小的元素的下标,从前往后,构造单调递增栈;求解数组中元素右边第一个比它大的元素的下标,从前往后,构造单调递减栈;求解数组中元素左边第一个比它小的元素的下标,从后往前,构造单调递减栈;求解数组中元素左边第一个比它小的元素的下标,从后往前,原创 2021-03-16 18:55:53 · 284 阅读 · 0 评论 -
2021/01/12打卡
560 和为K的子数组解题思路:最先向想到的是三重暴力循环:如下代码所示:时间复杂度为O(n^3);超时int subarraySum(vector<int>& nums, int k) { int cnt=0; for(int i = 0; i<nums.size();i++){ for(int j=i;j<nums.size();j++){ int sum = 0;原创 2021-01-12 17:05:55 · 131 阅读 · 0 评论 -
2020/12/30leetcode刷题
25 K个一组反转链表解题思路:大致过程可以分解为1、找到待翻转的k个节点(注意:若剩余数量小于 k 的话,则不需要反转,因此直接返回待翻转部分的头结点即可)。2、对其进行翻转。并返回翻转后的头结点(注意:翻转为左闭又开区间,所以本轮操作的尾结点其实就是下一轮操作的头结点)。3、对下一轮 k 个节点也进行翻转操作。4、将上一轮翻转后的尾结点指向下一轮翻转后的头节点,即将每一轮翻转的k的节点连接起来。/** * Definition for singly-linked list. *原创 2020-12-31 11:45:04 · 83 阅读 · 0 评论 -
2020/12/29刷题
209长度最小的子数组解题思路:解答1:暴力解法:两层暴力循环解决问题时间复杂度:O(N2)class Solution {public: int minSubArrayLen(int s, vector<int>& nums) { int ret=INT_MAX; for(int i=0;i<nums.size();i++){ int sum=0; for(int j=i;j&原创 2020-12-30 10:01:28 · 129 阅读 · 0 评论 -
2020/12/27 leetcode打卡
6.Z字型变换leetcode 6 中等解题思路:遍历一遍字符串,从左到右按箭头方向迭代 s ,将每个字符添加到合适的行。之后从上到下遍历行即可。当前行 curRow 为 0 或 n-1 时,箭头发生反向转折。class Solution {public: string convert(string s, int numRows) { if(numRows<2) return s; bool flag=false; int le原创 2020-12-27 21:09:46 · 99 阅读 · 0 评论 -
2020/12/19leetcode打卡
11.盛水最多的容器leetcode11 中等解题思路利用双指针,左指针指向0,右指针指向最右边的,哪边小移动哪边的指针,,相等时两边都可以,取最大值即可。class Solution {public: int maxArea(vector<int>& height) { int l=0, r=height.size()-1; int ans=0; while(l<r){ int are原创 2020-12-21 14:15:34 · 132 阅读 · 1 评论 -
2020/12/18打卡
leetcode刷题31.下一个排列31 中等解题思路定义pos=num.size()-1;对于1857643;从末尾开始遍历寻找破坏升序的数nums[pos-1],在这个里面就是数字5,然后把begin+pos到end的数字翻转即为1853467,从pos到end寻找第一个比num[pos-1]大的数字,然后交换两者,即为后一个排列,这里交换5和6,即为1863457;。而对于123,num[pos-1]=2,交换2和3 即为132;class Solution {public:原创 2020-12-21 14:15:11 · 106 阅读 · 0 评论 -
2020/12/17leetcode刷题
2020/12/0721.合并两个有序链表leetcode21解题思路:解法1,递归时间复杂度为O(M+N);空间复杂度为O(m+n);class Solution {public: ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { if (l1 == nullptr) { return l2; } else if (l2 == nullptr) {原创 2020-12-17 18:28:31 · 126 阅读 · 0 评论 -
2020/12/16 leetcode刷题
Leetcode 打卡738.单调递增的数字20 有效的括号738.单调递增的数字解题思路:利用贪心算法:此题从后向前遍历;一旦出现strNum[i - 1] > strNum[i]的情况(非单调递增),先让strNum[i - 1]–,然后strNum[i]给为9;代码实现class Solution {public: int monotoneIncreasingDigits(int N) { //to_string 将数字转换为字符串 string原创 2020-12-16 18:38:48 · 168 阅读 · 1 评论