随笔分类 -  LeetCode / LeetCode题解

熟悉算法
摘要:在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。 给定两个整数数组 gas 和 cost ,如果你可以绕环路行驶一周,则返 阅读全文
posted @ 2022-09-03 15:44 失控D大白兔
摘要:给你一个整数数组nums ,判断这个数组中是否存在长度为 3 的递增子序列 ####1. 贪心法 贪心更新两个最左端端点 class Solution { public: bool increasingTriplet(vector<int>& nums) { int len = nums.size( 阅读全文
posted @ 2022-09-03 01:49 失控D大白兔
摘要:####1. 生产者-消费者问题(互斥+同步) 生产者把消息放入缓冲区,消费者从中取出信息,二者互斥访问 semaphore mutex = 1;//互斥访问缓冲区,因为有多个缓冲区资源 semaphore empty = n;//n个空闲区资源,内部互斥 semaphore full = 0;// 阅读全文
posted @ 2022-08-28 01:52 失控D大白兔
摘要:####1. 返回尾零数量 可以转换为求质因子为2和5数量的较小值,实际上就是求质因子为5的数量 class Solution { public: int trailingZeroes(int n) { int ans = 0; for (int i = 5; i <= n; i += 5) //遍 阅读全文
posted @ 2022-08-28 00:32 失控D大白兔 阅读(54) 评论(0) 推荐(0)
摘要:给定排序好的数组 arr ,两个整数 k 和 x ,从数组中找到最靠近 x(两数之差最小)的 k 个数。返回的结果必须要是按升序排好的 ####1. 通用调库解法 class Solution { public: vector<int> findClosestElements(vector<int> 阅读全文
posted @ 2022-08-25 00:48 失控D大白兔
摘要:一个 n x n 的二维网络 board 仅由 0 和 1 组成 。每次移动,你能任意交换两列或是两行的位置 返回将这个矩阵变为 “棋盘” 所需的最小移动次数 ,如果不存在可行的变换,输出 -1 ####1. 数学方法 移动使满足条件的题目,首先得判断棋盘是否满足条件 容易从棋盘得知,需要满足以下几 阅读全文
posted @ 2022-08-23 08:18 失控D大白兔
摘要:####1. 非递归先序 vector<int> preorderTraversal(TreeNode* root) { vector<int> nums; stack<TreeNode*> s; while(root||!s.empty()){ if(root){ nums.push_back(r 阅读全文
posted @ 2022-08-21 23:04 失控D大白兔
摘要:####1. 递归删除指定值(无头结点) void Del(ListNode* L,int val){ ListNode* p;//指向被删除节点 if(L==NULL) return;//递归边界 if(L->val==val){//处理首指针 p = L; L = L->next; free(p 阅读全文
posted @ 2022-08-20 19:53 失控D大白兔
摘要:####1. 删除返回最小值并由最后元素填补 bool Del_Min(vector<int>& nums,int &val) { if(nums.size()==0) return false; int pos = 0;//假定0号元素最小 for(int i=1;i<nums.size();i+ 阅读全文
posted @ 2022-08-20 18:35 失控D大白兔
摘要:给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点,其值为 nums 中的最大值 递归地在最大值 左边 的 子数组前缀上 构建左子树 递归地在最大值 右边 的 子数组后缀上 构建右子树 ####1. 暴力分治构造 暴力在于每次递归都要找一次 阅读全文
posted @ 2022-08-20 00:56 失控D大白兔
摘要:有一个单线程CPU 正在运行一个含有 n 道函数的程序。每道函数都有一个位于 0 和 n-1 之间的唯一标识符 函数调用存储在一个调用栈 上 :当一个函数调用开始时,它的标识符将会推入栈中。而当一个函数调用结束时,它的标识符将会从栈中弹出。标识符位于栈顶的函数是 当前正在执行的函数 。每当一个函数开 阅读全文
posted @ 2022-08-19 00:13 失控D大白兔
摘要:给你一个正整数数组 nums,请你帮忙从该数组中找出能满足下面要求的最长前缀,并返回该前缀的长度 从前缀中恰好删除一个元素后,剩下每个数字的出现次数都相同。 ####1. 双哈希表 一个记录每个值的频数,一个记录每个频数的个数 class Solution { public: int maxEqua 阅读全文
posted @ 2022-08-18 00:34 失控D大白兔
摘要:####1. 最多能完成排序的块I 给定一个长度为 n 的整数数组 arr ,它表示在 [0, n - 1] 范围内的整数的排列。 我们将 arr 分割成若干 块 (即分区),并对每个块单独排序。将它们连接起来后,使得连接的结果和按升序排序后的原数组相同。 返回数组能分成的最多块数量。 //从左往右 阅读全文
posted @ 2022-08-15 06:45 失控D大白兔
摘要:有 n 个人被分成数量未知的组。每个人都被标记为一个从 0 到 n - 1 的唯一ID 。 给定一个整数数组 groupSizes ,其中 groupSizes[i] 是第 i 个人所在的组的大小 例如,如果 groupSizes[1] = 3 ,则第 1 个人必须位于大小为 3 的组中 每个人应该 阅读全文
posted @ 2022-08-12 00:30 失控D大白兔
摘要:给你一个整数 n ,请你在无限的整数序列 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...] 中找出并返回第 n 位上的数字 ####1. 找规律模拟 class Solution { public: int findNthDigit(int n) { long d = 阅读全文
posted @ 2022-07-30 20:53 失控D大白兔
摘要:给定一个由不同正整数的组成的非空数组 nums ,考虑下面的图: 有 nums.length 个节点,按从 nums[0] 到 nums[nums.length - 1] 标记 只有当 nums[i] 和 nums[j] 共用一个大于 1 的公因数时,nums[i] 和 nums[j]之间才有一条边 阅读全文
posted @ 2022-07-30 15:19 失控D大白兔
摘要:给定一个正整数 n ,输出外观数列的第 n 项 「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述 ####1. 递归 判断相邻相等的方法每次只能处理上一个值 等价于每次比较上一个组的末位置与当前组的初始位置 最后一个值要额外处理 class Solution { pub 阅读全文
posted @ 2022-07-27 20:23 失控D大白兔
摘要:####1. 基本计算器 实现加减和括号优先级,忽视空格 class Solution { public: int calculate(string s) { stack<int> ops;//栈存储上一层 ops.push(1); int sign = 1; int ret = 0; int n 阅读全文
posted @ 2022-07-27 20:07 失控D大白兔
摘要:给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素 ####1. 模拟操作(贪吃蛇不断更改方向) class Solution { public: vector<int> spiralOrder(vector<vector<int>>& matrix) { 阅读全文
posted @ 2022-07-27 19:48 失控D大白兔
摘要:给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 ####1. O(m+n)辅助空间 基本操作,用两个数组存储对应行和列是否要置零 class Solution { public: void setZeroes(vector<vector<int>>& mat 阅读全文
posted @ 2022-07-27 18:32 失控D大白兔