算法
文章平均质量分 62
只会说加油的凹凸曼~
每天的快乐就是停止胡思乱想~~~
展开
-
算法刷题计划(二十)填充每个节点的下一个右侧节点指针 II、另一棵树的子树、二进制矩阵中的最短路径、被围绕的区域、所有可能的路径
LeetCode打卡一、填充每个节点的下一个右侧节点指针 II二、另一棵树的子树三、二进制矩阵中的最短路径四、被围绕的区域五、所有可能的路径一、填充每个节点的下一个右侧节点指针 II题目:题解:方法一(广度优先搜索bfs):Node*connect(Node*root){ if(!root) return root; queue<Node*>que; que.push(root); while(!q原创 2021-12-07 15:51:09 · 284 阅读 · 0 评论 -
算法刷题计划(十九)乘积小于K的子数组、长度最小的子数组、岛屿数量、省份数量
leetCode打卡一、乘积小于K的子数组二、长度最小的子数组三、岛屿数量四、省份数量一、乘积小于K的子数组题目:题解(滑动窗口):class Solution {public: int numSubarrayProductLessThanK(vector<int>& nums, int k) { if(nums.empty()||k==0||k==1) return 0; int left=0,right=0,base=原创 2021-12-06 18:53:59 · 316 阅读 · 0 评论 -
算法刷题计划(十八)比较含退格的字符串、区间列表的交集、找到字符串中所有字母异位词
LeetCode打卡一、比较含退格的字符串二、区间列表的交集三、找到字符串中所有字母异位词一、比较含退格的字符串题目:题解:class Solution {public: bool backspaceCompare(string s, string t) { return rebuildStr(s)==rebuildStr(t); } string rebuildStr(string str){ string s; fo原创 2021-12-03 16:42:26 · 1094 阅读 · 0 评论 -
算法刷题计划(十七)删除排序链表中的重复元素 II、寻找峰值、寻找旋转排序数组中的最小值、搜索二维矩阵
LeetCode打卡一、删除排序链表中的重复元素 II二、寻找峰值三、寻找旋转排序数组中的最小值四、搜索二维矩阵一、删除排序链表中的重复元素 II题目:题解:方法一(遍历):class Solution {public: ListNode* deleteDuplicates(ListNode* head) { if (!head) { return head; } ListNode* dummy = new原创 2021-12-01 19:49:58 · 254 阅读 · 0 评论 -
算法刷题计划(十六)合并区间、插入区间、最后一个单词的长度、螺旋矩阵 II
LeetCode 打卡一、合并区间二、插入区间三、最后一个单词的长度四、螺旋矩阵 II一、合并区间题目题解:class Solution {public: vector<vector<int>> merge(vector<vector<int>>& intervals) { int n=intervals.size(); vector<vector<int>>res;原创 2021-11-30 16:15:41 · 346 阅读 · 0 评论 -
算法刷题计划(十五)Pow(x, n)、最大子序列和、螺旋矩阵、串联所有单词的子串(回顾滑动窗口)
LeetCode打卡一、Pow(x,n);二、最大子序和三、螺旋矩阵四、串联所有单词的子串(回顾滑动窗口)一、Pow(x,n);题目:题解:方法一(递归+快速幂):class Solution {public: double myPow(double x, int n) { if(n==0) return 1; long long N=n; return N>0?quickPri(x,N):1/quickPr原创 2021-11-26 17:48:55 · 293 阅读 · 0 评论 -
算法刷题计划(十四)旋转图像、字母异位词分组、分发糖果、分发饼干
LeetCode算法题打卡一、旋转图像二、字母异位词分组三、分发糖果四、分发饼干一、旋转图像题目:题解:方法一(“复制粘贴”方法);class Solution {public: void rotate(vector<vector<int>>& matrix) { int m=matrix.size(),n=matrix[0].size(); vector<vector<int>>c原创 2021-11-24 19:58:39 · 415 阅读 · 0 评论 -
算法技巧总结(五)动态规划与贪心算法
该文章有点长,请耐心阅览一下,阅览完后必有收获!算法技巧总结一、动态规划1)斐波那契数2)爬楼梯3)使用最小花费爬楼梯4)买卖股票的最佳时期5)最小路径和6)打家劫舍7)打家劫舍28)最长回文子串二、贪心算法1)跳跃游戏2)跳跃游戏2三、温馨提示一、动态规划什么是动态规划算法呢?动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移。一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划(DP)。动态规划常用于的一个问题就是求最值, 比如说最常.原创 2021-11-20 21:09:50 · 1832 阅读 · 0 评论 -
算法刷题计划(十三)括号生成、串联所有单词子串、全排列、全排列2
leetcode算题打卡一、括号生成二、串联所有单词子串三、全排列四、全排列2一、括号生成题目:题解(回溯):class Solution {public: vector<string> generateParenthesis(int n) { vector<string>ans; dfs(ans,"",0,n); return ans; } void dfs(vector<strin原创 2021-11-17 19:58:42 · 4321 阅读 · 0 评论 -
算法技巧总结(四)滑动窗口
滑动窗口字面意思就是这个窗口是移动的,也就是移动是按照一定方向来的。窗口大小并不是固定的,可以不断扩容直到满足一定的条件;也可以不断缩小,直到找到一个满足条件的最小窗口;当然也可以是固定大小。滑动窗口实际上也算是双指针的应用,同样是由左右指针,右指针的作用是不断扩大窗口的范围,当窗口内的对象符合某个条件时,进行统计或者某种操作;然后左指针作用收缩窗口来打破条件,以便让右指针右移继续扩大窗口滑动窗口的应用:class Solution {public: vector<i..原创 2021-11-16 10:30:25 · 887 阅读 · 0 评论 -
算法刷题计划(十一)丢失的数字、范围求和 II、外观数列
LeetCode刷题记录一、丢失的数据范围求和 II外观数列组合总和一、丢失的数据题目题解方法一(数学整数相减):class Solution {public: int missingNumber(vector<int>& v) { int n=v.size(); int sum=n*(n+1)/2; int total=accumulate(v.begin(),v.end(),0); ret原创 2021-11-07 10:26:47 · 3534 阅读 · 0 评论 -
算法刷题计划(九)求众数 II、构造矩形、实现 strStr()、两数相除、下一个排列
算法刷题一、求众数 II二、构造矩形三、实现 strStr()四、两数相除五、下一个排列一、求众数 II题目:题解(哈希):class Solution {public: vector<int> majorityElement(vector<int>& nums) { if(nums.empty()) return {}; if(nums.size()==1) return {nums[0]};原创 2021-10-23 15:26:33 · 225 阅读 · 0 评论 -
算法技巧总结(三)KMP
序言:遇到需要查找原字符串中的字符是否含有匹配串中的字符时,通常有那几种方法解决呢?一般我们可能只想到的是用暴力解决方法来解题,但这个方法不是不好就是用的时间很长。所以有什么方法可以省时呢?其实这类题目可以用kmp方法来解的,这种方法是以空间换时间,即用时间短,占用空间相比于暴力解决方法大点。KMP详细讲解一、kmp算法的概念二、最长相等前缀和后缀三、next创建及代码讲解四、kmp算法代码五、应用:实现 strStr()若该文章有出错请留言告知一下,谢谢~~一、kmp算法的概念暴力..原创 2021-10-22 17:00:19 · 290 阅读 · 0 评论 -
算法技巧总结(二)回溯
序言:刷LeetCode算法题时看人家解题方法是用回溯算法时,瞬间感觉到该题用该算法就很简单。细看了回溯算法后个人感觉回溯与递归有异曲同工之妙。什么是递归呢???递归是指函数/过程/子程序在运行过程中直接或间接调用自身而产生的重入现象。递归通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。简单来说为了描述问题的某一状态,必须用到该状态的上一个状态;而如果要描述上一个状态,又必..原创 2021-10-19 19:28:37 · 242 阅读 · 0 评论 -
算法技巧总结(一)双指针
序言:最近刷算法题时发现有的题目要求是:不要使用额外数组空间,必须在原地修改输入数组,并在使用O(1)额外的条件完成。这对于常规的采用循环甚至双循环的方法来说空间开销就很大,而且题设要求不能开辟更多的空间,只能再原来的内存空间进行修改。因此,双指针法(双下标法)的用处就体现出来了。那什么是双指针算法呢???双指针算法其实就是初始化两个指针,一个指向数组的首位置元素,另外一个指向数组的末尾的位置元素,然后根据自定义需求条件进行两指针的移动,最后是找到两个满足条件的数或者不存在这样的两个数字,.原创 2021-10-19 16:19:20 · 552 阅读 · 0 评论 -
算法刷题计划(八)(LeetCode)两两交换链表中的节点、 删除有序数组中的重复项、移除元素、数字的补数
LeetCode算法题目一、两两交换链表中的节点二、删除有序数组中的重复项三、移除元素四、数字的补数一、两两交换链表中的节点题目:解题方法:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x)原创 2021-10-19 15:40:31 · 91 阅读 · 0 评论 -
算法刷题计划(七)(LeetCode)删除链表的倒数第 N 个结点、有效的括号、合并两个有序链表、整数转换英文表示
LeetCode算法刷题一、删除链表的倒数第N个结点二、有效的括号三、合并两个有序链表一、删除链表的倒数第N个结点题目:解题方法:1、计算链表长度/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) :原创 2021-10-17 20:47:49 · 123 阅读 · 0 评论 -
算法刷题计划(六)三数之和、最接近的三数之和、电话号码的字母组合、四数之和
算法刷题计划一、三数之和二、最接近的三数之和一、三数之和题目:解题方法:(排序+双指针)class Solution {public: vector<vector<int>> threeSum(vector<int>& nums) { int n=nums.size(); sort(nums.begin(),nums.end()); vector<vector<int>原创 2021-10-10 17:06:40 · 183 阅读 · 0 评论 -
算法刷题计划(五)最长公共前缀、罗马数字转整数、重复的DNA序列
算法刷题计划(1)最长公共前缀(2)罗马数字转整数(3)重复的DNA序列(1)最长公共前缀题目:编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例 1:输入:strs = [“flower”,“flow”,“flight”]输出:“fl”示例 2:输入:strs = [“dog”,“racecar”,“car”]输出:""解释:输入不存在公共前缀。解题方法:class Solution {public: stri原创 2021-10-08 21:17:22 · 114 阅读 · 0 评论 -
算法刷题计划(四)两整数之和、回文数、盛最多水的容器、整数转罗马数字
LeetCode算法(六)(1)两整数之和(2)回文数(1)两整数之和题目:给你两个整数 a 和 b ,不使用 运算符 + 和 - ,计算并返回两整数之和。示例 1:输入:a = 1, b = 2输出:3示例 2:输入:a = 2, b = 3输出:5class Solution {public: int getSum(int a, int b) { while(b!=0){ unsigned int crray=原创 2021-09-26 16:25:37 · 147 阅读 · 0 评论 -
算法刷题计划(三)扁平化多级双向链表、 Z 字形变换、两个字符串的删除操作、整数反转
leetcode算法(1)扁平化多级双向链表(2)Z 字形变换(1)扁平化多级双向链表题目:····多级双向链表中,除了指向下一个节点和前一个节点指针之外,它还有一个子链表指针,可能指向单独的双向链表。这些子列表也可能会有一个或多个自己的子项,依此类推,生成多级数据结构,如下面的示例所示。····给你位于列表第一级的头节点,请你扁平化列表,使所有结点出现在单级双链表中。示例 1:输入:head = [1,2,3,4,5,6,null,null,null,7,8,9,10,null,null原创 2021-09-24 16:42:15 · 134 阅读 · 0 评论 -
算法刷题计划(二)二分查找、兩數相加、无重复字符的的最长子串、寻找两个正序数组的中位数
leetcode算法(二)(1)二分查找(2)两数相加(1)二分查找给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。示例 1:输入: nums = [-1,0,3,5,9,12], target = 9输出: 4解释: 9 出现在 nums 中并且下标为 4示例 2:输入: nums = [-1,0,3,5,9,12], target = 2输出: -1解释: 2原创 2021-09-06 10:19:35 · 155 阅读 · 0 评论