leetcode
让算法活起来
执笔论英雄
这个作者很懒,什么都没留下…
展开
-
树形Dp 2925. 在树上执行操作以后得到的最大分数
【代码】树形Dp 2925. 在树上执行操作以后得到的最大分数。原创 2023-11-07 20:09:58 · 198 阅读 · 0 评论 -
1451. 重新排列句子中的单词【strtok,qsort,strcat,tolower,toupper, malloc】
【代码】1451. 重新排列句子中的单词【strtok,qsort,strcat,tolower,toupper, malloc】原创 2023-05-12 16:42:30 · 52 阅读 · 0 评论 -
【二分题:最小最大问题】 2517. 礼盒的最大甜蜜度
【代码】【二分题:最小最大问题】 2517. 礼盒的最大甜蜜度。原创 2022-12-28 18:00:37 · 152 阅读 · 0 评论 -
leetcode 2265统计值等于子树平均值的节点数
2022来水第一篇博客2022年5月12日,开始封校的第一天生活,在苏州街公寓下午蹭了所里两小时的高级算法课,学了一点调度算法。20:51刷了一道leetcode水题 ,接下来看看论文吧。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(原创 2022-05-12 20:55:56 · 167 阅读 · 0 评论 -
leetcode :475 供暖器
2021年又要过去了,下午实验室要年终汇报,一年来感觉收获寥寥,充满了遗憾,写论文写得烦躁,还是刷道题吧。不过想了一会儿,没想到最优解,于是用二分写了个超时版本:判断radius 是否可以完成供暖,遍历heaters , 记录每个heaters 可以供暖的范围,最后遍历houses,判断是否所有house在供暖区间内写完超时版本,看了看答案思路,有时间再实现一下。希望能坚持每日一题吧class Solution {public: bool isHeat(vector<int>原创 2021-12-20 11:03:06 · 110 阅读 · 0 评论 -
2021-11-05 阿里笔试
题目描述:有一个长度为n 的数组a, 下标四元组i<j<k<li <j < k < li<j<k<l ,求(ai−aj)2−(ak+al)2最大值(a_i - a_j)^2-(a_k+a_l)^2 最大值(ai−aj)2−(ak+al)2最大值,(n<105,ai<105)(n<10^5,a_i <10^5)(n<105,ai<105)输入: 第一行n, 接下来n个正整数输出:最值rr[0][i]原创 2021-11-06 14:37:37 · 102 阅读 · 0 评论 -
2021-09-27腾讯笔试第五题
n*n格子,由三种字符:点’.'表示平地星‘*’ 表示障碍物'#'表示房子。需要在某些地方(平地或房子)建商店,商店不能建在障碍物。最终要使得每一个房子出发到都可以到达商店,求商店数量的最小值,在商店数最少的情况下求每个房子到商店的最小距离输入:n 表示格子大小,char[][]格子输出:最小的商店数量,和最小的距离List item#include<iostream>#include<vector>#include<queue>#in原创 2021-09-28 14:02:58 · 127 阅读 · 0 评论 -
1936. 新增的最少台阶数(贪心) 周赛250中等难度
好久没刷了,自己刚看到题,可能知道是贪心,但还是无从下笔,但还是想出来了,感谢计算所卜老师的算法课 让我知道 了 遇题不决 “从最简单的例子出发” 的重要性,比如此题如果rungs 大小为1、2、。。先写出了第一个超时版本class Solution {public: // judge rungs, 能否到达lay; int addRungs(vector<int>& rungs, int dist) { int n = rungs.size.原创 2021-07-20 18:19:35 · 84 阅读 · 0 评论 -
1751. 最多可以参加的会议数目 II 0-1背包 - 二分
class Solution {public: int maxValue(vector<vector<int>>& events, int k) { int n =events.size(); vector<vector<int>>dp(n+1,vector<int>(k+1,0)); sort(events.begin(),events.end(),[&](vector&l原创 2021-05-31 19:41:12 · 72 阅读 · 0 评论 -
1011. 在 D 天内送达包裹的能力 (二分+ 贪心)
二分+ 贪心class Solution {public: bool _WithDays(vector<int>& weights, int cap, int D){ int day_cap=0; int total_days=0; int flag=0; for(int i=0;i<weights.size();i++){ day_cap += weights[i]; .原创 2021-04-26 17:39:33 · 83 阅读 · 0 评论 -
1838. 最高频元素的频数 贪心+ 二分+ 滑动窗口(值得做的)
// class Solution {// public:// int maxFrequency(vector<int>& nums, int k) {// sort(nums.begin(),nums.end());// cout<<nums.size()<<endl;// int res =1;// int left=0;// int right=1;/.原创 2021-04-26 12:05:24 · 101 阅读 · 0 评论 -
leetcode 第238场周赛 5740. 所有元音按顺序排布的最长子字符串(中等, 双指针)
是常规双指针解法,难点在于如何记录left-right 是满足aeiou 顺序的, 这里采用引入pre 指针,表示 right 指针 的前 一个不同的 字母,表示aeiou , 已经满足的元音字母class Solution {public: int longestBeautifulSubstring(string word) { int left =0 ;// for(left=0;left<=word.size();left++){.原创 2021-04-25 15:34:00 · 150 阅读 · 0 评论 -
150. 逆波兰表达式求值(中等 栈的使用)
class Solution {public: int evalRPN(vector<string>& tokens) { stack<int>st; for(auto ch:tokens){ if(ch=="*"|| ch=="+"|| ch=="-" ||ch=="/"){ // string top=st.top(); int a =st..原创 2021-03-20 20:22:57 · 64 阅读 · 0 评论 -
676. 实现一个魔法字典 (字典树)
01题目描述02整体思想3.bool _search_2(string & word) 原理如图示04 bool _search_2(string & word) 对应的代码逻辑如下 bool _search_2(string & word){ TrieNode *cur=this; // cur一开始 指向根节点,然后分别将第1、2、3、...个字母改变,判断是否能匹配成功 for( int j=0;j<原创 2021-02-19 11:27:45 · 186 阅读 · 0 评论 -
leetcode 648单词 替换(字典树中等)
class TrieNode{public: vector<TrieNode*> nodes; bool tag=0; TrieNode():nodes(26,nullptr){} void insert(string & word){ TrieNode *cur=this; for(auto ch:word){ int idx=ch-'a'; if(cur->no.原创 2021-02-18 20:28:20 · 95 阅读 · 0 评论 -
leetcode 1004 滑动窗口 双指针
力扣class Solution {public: nt lonigestOnes(vector<int>& A, int K) { int left=0; int right=0; int cnt=0; int res=0; while(right<A.size()){ while(right<A.size()){ if(A[.原创 2021-02-16 17:59:12 · 80 阅读 · 0 评论 -
leetcode 978双指针 与动态规划
双指针解法思路:如果left-right 满足湍 流子数组,则right 向右移动, 判断是否满足新的湍流子数组的概念,具体判断方法:在右移之前需要标记 right 与right-1 的大小, 如过前者大,则flag=1,表示进入窗口的元素要小于当前的末尾(即right),反之表示进入的窗口数据增大class Solution {public: int maxTurbulenceSize(vector<int>& arr) { int left=0; .原创 2021-02-14 18:08:16 · 183 阅读 · 0 评论 -
leetcode 215. 数组中的第K个最大元素 实现最小堆 随机partition
template<typename Item>class MinHeap{private: Item * data; int count;// 记录堆中元素个数 int capacity; // 记录堆中最大可容纳的个数 void shiftUp(int k){ while(k>1 && data[k/2]>data[k]){ swap(data[k/2],data[k]); .原创 2021-02-12 12:44:57 · 86 阅读 · 0 评论 -
1202. 交换字符串中的元素(dfs, bfs, 并查集)
class solution {public: vector<vector<int>>G; void G_init(vector<vector<int>>& pairs){ for(auto p:pairs){ G[p[0]].push_back(p[1]); G[p[1]].push_back(p[0]); } } void dfs(i.原创 2021-01-11 17:39:31 · 76 阅读 · 0 评论 -
1109. 航班预订统计(前缀和+ 公交站+ 树状数组)
class Solution {public: vector<int> corpFlightBookings(vector<vector<int>>& bookings, int n) { vector<int>res(n,0);//res 表示每个车站人数变化量 for(auto book:bookings){ res[book[0]-1]+=book[2];原创 2020-11-07 22:18:02 · 129 阅读 · 1 评论 -
556. 下一个更大元素 III(单调栈)
第一次看到这道题,没有读懂是什么意思?比如比“25431” 下一个更大的数是31245重要性质递减的序列是不存在下一个更大的数的,如4321算法思路:从低位到高位找到第一个递减的数,即a[i-1]和右边第一个比a[i-1]大的数 a[j],互换位置。最后反转a[i-1]后的序列可以两次遍历找到a[i-1]和a[j],也可以利用单调栈同时找到这两个数:从右到左遍历,如果序列递增则入栈,若当前元素小于栈定元素,则当前元素即为a[i-1]然后不断出栈,第一个满足栈定元素小于a[i-1.原创 2020-11-07 20:07:27 · 172 阅读 · 0 评论 -
503. 下一个更大元素 II(单调栈)
class Solution {public: vector<int> nextGreaterElements(vector<int>& nums) { stack<int>st; vector<int>res(nums.size(),-1); for(int idx=0;idx<nums.size()*2;idx++){ int i=idx%nums.size(.原创 2020-11-07 16:58:43 · 81 阅读 · 0 评论 -
leetcode 857 (堆)
// class Solution {// public:// double mincostToHireWorkers(vector<int>& quality, vector<int>& wage, int K) {// int N=wage.size();// double ans=DBL_MAX;// for(int i=0;i<N;i++){// double .原创 2020-10-03 14:35:38 · 166 阅读 · 0 评论 -
787. K 站中转内最便宜的航班
01 第一个容易想到的dfs (超时)class Solution {public: int res=INT_MAX; vector<vector<int>>G;// dfs(cur,total,layer) 表示从src点开始到达cur ,cur(在第layer 层) void dfs(int cur,int total,int layer,vector<vector<int>> & fee,int K,int原创 2020-09-24 23:52:14 · 176 阅读 · 0 评论 -
leetcode 568最大休假天数(动态规划,dfs,bfs)
dfs 超时版本class Solution {public: /** * @param flights: the airline status from the city i to the city j * @param days: days[i][j] represents the maximum days you could take vacation in the city i in the week j * @return: the maximum vac原创 2020-09-24 18:54:23 · 321 阅读 · 0 评论 -
264. 丑数 II(优先队列)
class Solution {public: int nthUglyNumber(int n) { priority_queue<long ,vector<long>,greater<long>>q; q.push(1); for(int i =1;i<=n-1;i++){ long top =q.top(); while(!q.empty() &&原创 2020-09-21 22:43:43 · 90 阅读 · 0 评论 -
leetcode 378. 有序矩阵中第K小的元素(优先队列、二分、分治)
class Solution {public: int kthSmallest(vector<vector<int>>& matrix, int k) { int n=matrix.size(); priority_queue<int,vector<int>,greater<int>>q; for(int i=0;i<n;i++){ for(int j.原创 2020-09-21 21:34:10 · 110 阅读 · 0 评论 -
38. 外观数列(递规+双指针)
class Solution {public:// string count(string str){// int nums=1;// string res="";// for(int i=1;i<str.size();i++){ // if(str[i]==str[i-1]){// nums++;// }// .原创 2020-09-04 09:50:09 · 151 阅读 · 0 评论 -
841. 钥匙和房间(图dfs)
可以自己做出来class Solution {public: vector<vector<int>> g; vector<int> visited; void dfs (int head){ if(visited[head]==1) return ; visited[head]=1; for(int i=0;i<g[head].size();i++){ dfs(g[h.原创 2020-08-31 21:04:19 · 91 阅读 · 0 评论 -
108. 将有序数组转换为二叉搜索树
文章目录javapythonc++java/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { private TreeNode dfs(int [] nums, in原创 2020-08-18 09:20:53 · 96 阅读 · 0 评论 -
1546. 和为目标值的最大数目不重叠非空子数组数目----前后缀+哈希(set)+ 区间贪心
贪心思想来源于leetcode 435前后缀+哈希来源于 leetcode 560本文使用的是后缀class Solution {public: int maxNonOverlapping(vector<int>& nums, int target) { int n=nums.size(); int suffix=0; map<int,int>mp; int end=n;// 记录每个区间的起点.原创 2020-08-11 11:11:51 · 124 阅读 · 0 评论 -
560. 和为K的子数组(前后缀+哈希)
暴力// class Solution {// public:// int subarraySum(vector<int>& nums, int k) {// int n=nums.size();// //以i开头// int res=0;// for(int i=0;i<n;i++){// int sum=0;// for(int j=i;j.原创 2020-08-10 21:34:56 · 96 阅读 · 0 评论 -
99. 恢复二叉搜索树(中序,递规非递规)
#Definition for a binary tree node.class TreeNode: def __init__(self,val=0,left=None,right=None): self.val=val self.left=left self.right=rightclass Solution: def recoverTree(self, root: TreeNode) -> None: """原创 2020-08-08 20:42:26 · 93 阅读 · 0 评论 -
486. 预测赢家(动态规划)
class Solution: def PredictTheWinner(self, nums: List[int]) -> bool: # @lru_cache() def dfs(i,j): if i==j: return nums[i] return max(nums[i]-dfs(i+1,j),nums[j]-dfs(i,j-1)) return dfs(0,原创 2020-08-08 14:58:07 · 162 阅读 · 0 评论 -
1415. 长度为 n 的开心字符串中字典序第 k 小的字符串
// class Solution {// public:// vector<string>res;// string s="abc";// void dfs (int start,int h,string &ans){// ans+=s[start];// if(h==1) {// res.push_back(ans);// return ;// ..原创 2020-07-26 16:52:55 · 173 阅读 · 0 评论 -
410. 分割数组的最大值(动规、二分+贪心)
class Solution {public: int splitArray(vector<int>& nums, int m) { int n=nums.size(); // int dp[n+1][m+1]={00 vector<vector<long long >>dp(n+1,vector<long long >(m+1,0)); for(int i=1;i<=n.原创 2020-07-25 10:01:33 · 115 阅读 · 0 评论 -
1521. 找到最接近目标值的函数值(位运算、线段树、滑动窗口)
力扣题// 暴力class Solution {public: int closestToTarget(vector<int>& arr, int target) { int res=INT_MAX; for(int i=0;i<arr.size();i++){ for(int j=i;j<arr.size();j++){ int ans=arr[i];原创 2020-07-23 17:08:17 · 122 阅读 · 0 评论 -
493. 翻转对 归并排序
先学习求普通的逆序对剑指 Offer 51. 数组中的逆序对本题思路:如果左边的第i个是右边的第j个的2 倍之多,则i之后的||L||-i 都是满足要求的逆序对,则j++来判断i能否可以和j之后的成为满足要求的逆序对,否则来判断i之后的能否可以和j满足要求的逆序对,即i++class Solution {public: int sort_and_count(vector<int>&A,int start,int end){ if(start<end).原创 2020-07-21 23:11:33 · 119 阅读 · 0 评论 -
5465. 子树中标签相同的节点数(图论)
class Solution {public: int vis[100001]{0}; vector<int>ans; vector<int> dfs(vector<vector<int>> & g,int u,string & labels){ vector<int> count(26); if(vis[u]) return count; vis.原创 2020-07-21 13:01:00 · 144 阅读 · 0 评论 -
1520. 最多的不重叠子字符串(贪心+区间)
先统计出每个字母的起始与终止位置,然后对它们进行扩展并去掉不合法的。比如abab, a为【0,2】。而b为【1,3】,扩展为【0,3】;再比如ababa, a为【0,4】,b为【1,3】,显然b是不合法的,可以将b 从集合中删掉,也可以将b 扩展为a处理之后所有字串均合法,且不会出现交叉重叠,即形如【0,2】,【1,3】。 但允许一个串包含另一个串。经过这样处理之后,返回的串的个数肯定是固定了的(不存在交叠的串),只需要利用贪心优先返回最短的串(因为存一个大串,包含小串的可能)。这里,可以将以串的终.原创 2020-07-21 12:49:23 · 366 阅读 · 0 评论