算法
今天要来电代码吗
What does not kill me, makes me stronger.
展开
-
1241.外卖店优先级
这题难是不难,就是要思路清晰,不要害怕开很多数组,开就完事了。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#define x first#define y secondusing namespace std;typedef pair<int, int> PII;const int N = 1e5 + 10;PII order[N.原创 2022-03-01 14:44:21 · 171 阅读 · 0 评论 -
LeetCode 72.编辑距离
LeetCode 72.编辑距离给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符示例 1:输入:word1 = “horse”, word2 = “ros”输出:3解释:horse -> rorse (将 ‘h’ 替换为 ‘r’)rorse -> rose (删除 ‘r’)rose -> ros (删除 ‘e’)示例 2:输入:w原创 2020-12-27 20:02:02 · 121 阅读 · 0 评论 -
反转链表
反转一个单链表示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL方法一:递归class Solution {public: ListNode* reverseList(ListNode* head) { if(head == nullptr || head->next == nullptr){ return head;原创 2021-03-02 21:39:54 · 59 阅读 · 0 评论 -
LeetCode 5.最长回文子串 (动态规划、中心扩散)
LeetCode 5.最长回文子串给你一个字符串 s,找到 s 中最长的回文子串。示例 1:输入:s = “babad”输出:“bab”解释:“aba” 同样是符合题意的答案。示例 2:输入:s = “cbbd”输出:“bb”示例 3:输入:s = “a”输出:“a”示例 4:输入:s = “ac”输出:“a”提示:1 <= s.length <= 1000s 仅由数字和英文字母(大写和/或小写)组成来源:力扣(LeetCode)链接:h原创 2021-03-01 21:35:53 · 94 阅读 · 0 评论 -
并查集
class UnionFind{ private: vector<int> parent; vector<int> rank; public: UnionFind(int n){ parent.resize(n); rank.resize(n); for(int i=0;i<n;i++){ parent[i]=i; rank[i]=1; } } int Find(){ if(x!=parent[x]){原创 2021-01-11 21:58:48 · 89 阅读 · 1 评论 -
LeetCode 752.打开转盘锁 BFS算法
LeetCode 752.打开转盘锁 BFS算法你有一个带有四个圆形拨轮的转盘锁。每个拨轮都有10个数字: ‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’ 。每个拨轮可以自由旋转:例如把 '9’变为 ‘0’,‘0’ 变为 ‘9’ 。每次旋转都只能旋转一个拨轮的一位数字。锁的初始数字为 ‘0000’ ,一个代表四个拨轮的数字的字符串。列表 deadends 包含了一组死亡数字,一旦拨轮的数字和列表里的任何一个元素相同,这个锁将会被永久锁定,无法再被原创 2021-01-10 22:28:28 · 123 阅读 · 0 评论 -
LeetCode 51.N皇后 回溯算法
n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。示例 1:输入:n = 4输出:[[".Q…","…Q",“Q…”,"…Q."],["…Q.",“Q…”,"…Q",".Q…"]]解释:如上图所示,4 皇后问题存在两个不同的解法。示例 2:输入:n = 1输出:[[“原创 2021-01-07 18:58:14 · 142 阅读 · 1 评论 -
判断是否是环形链表
给定一个链表,让我们判断是否是有环环形链表分析: 可以采用双指针的方法来进行判断,一个快指针,一个慢指针代码如下:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: bool ha原创 2021-01-02 15:56:22 · 1848 阅读 · 5 评论 -
区间调度问题
比如找出[ [1,2], [2,3], [3,4], [1,3] ]中不重复子区间的最大个数这个算法可以运用到生活中的很多问题中直接上代码:class Solution {public: int eraseOverlapIntervals(vector<vector<int>>& intervals) { if(intervals.empty()) return 0; //先对子区间进行排序,按结束时间从小到大进行排序原创 2021-01-01 20:30:55 · 98 阅读 · 0 评论 -
LeetCode 1143.最长公共子序列
题目描述:给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列的长度。一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。两个字符串的「公共子序列」是这两个字符串所共同拥有的子序列。若这两个字符串没有公共子序列,则返回 0。示例 1:输入:text1 = “abcde”, text2 =原创 2020-12-08 17:45:24 · 97 阅读 · 0 评论 -
LeetCode 53.最大子序和
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/maximum-subarray典型的动态规划,直接上代码了代码如下:class Solution {public: int maxSubArra原创 2020-12-26 16:38:59 · 74 阅读 · 0 评论 -
最大子段和
最大子段和问题描述:给定范围left和right,求这个范围内数组子数组的和的最大值代码如下://最大子段和问题#include<iostream>using namespace std;int MaxSum(int r[],int left,int right){ int leftsum=0,midsum=0,rightsum=0,sum=0; int s1,s2,lefts,rights,mid; if(left==right) sum=r[left]; //序列长原创 2020-11-28 12:24:10 · 53 阅读 · 0 评论 -
归并排序
归并排序//归并排序#include<iostream>using namespace std;void Merge(int r[],int r1[],int s,int m,int t){ int i=s,j=m+1,k=s; while(i<=m&&j<=t) { if(r[i]<=r[j]){ r1[k++]=r[i++]; } else{ r1[k++]=r[j++]; } } while(i<=原创 2020-11-28 12:08:18 · 53 阅读 · 0 评论 -
逆序对问题
关于逆序对的问题(分治归并解法)//逆序对问题#include<iostream>using namespace std;int Merge(int r[],int s,int m,int t){ int r1[t+1]; for(int i=0;i<t+1;i++) r1[i]=r[i]; int i=s,j=m+1,k=s; int sum=0; while(i<=m&&j<=t) { if(r1[i]<=r1[j])原创 2020-11-28 11:56:01 · 89 阅读 · 0 评论 -
快速排序
快速排序算法#include<iostream>using namespace std;int Partition(int r[],int first,int end){ int i=first,j=end; while(i<j) { //右侧扫描 while(r[i]<=r[j]&&i<j) j--; if(i<j){ int temp=r[i]; r[i]=r[j]; r[j]=temp; }原创 2020-11-14 19:30:04 · 43 阅读 · 0 评论