摘要:
1. 图中的最短环 广度优先搜索 class Solution { public: int findShortestCycle(int n, vector<vector<int>> &edges) { vector<vector<int>> g(n);//二维矩阵存储 for (auto &e: e 阅读全文
摘要:
给定一个整数数组 nums 和一个正整数 k,找出是否有可能把这个数组分成 k 个非空子集,其总和都相等 ###一. 回溯法 ####1. 对每个数,回溯放入子集(球视角) 只关心每个球是否成功放入,球在k个容器中做选择,做出选择后进入下一个状态 class Solution { public: b 阅读全文
摘要:
###1. 灯泡开关I 初始时有 n 个灯泡处于关闭状态,第i轮切换i的倍数位置的开关,直到第n轮切换位置n的灯泡开关,返回n轮后灯泡亮着个数 实际上就是求进行奇数次操作灯泡个数,对第k个灯泡进行操作的轮次为其约数,约数一般成对存在,除非为完全平方数 原问题转换为求1~n的完全平方数个数 retur 阅读全文
摘要:
有 n 名工人, 给定两个数组 quality 和 wage ,其中 quality[i] 表示第 i 名工人的工作质量,其最低期望工资为 wage[i] 现在我们想雇佣 k 名工人组成一个工资组,满足一下条件 1. 对工资组中的每名工人,应当按其工作质量与同组其他工人的工作质量的比例来支付工资。 阅读全文
摘要:
求数组最长摆动子序列长度 ####1. 动态规划 分两种状态进行转移 up[i]表示数组前i个数的最长上升摆动序列长度 down[i]表示数组前i个数的最长下降摆动序列长度 注意比较条件,以及导致状态转移的原因 class Solution { public: int wiggleMaxLength 阅读全文
摘要:
在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。 给定两个整数数组 gas 和 cost ,如果你可以绕环路行驶一周,则返 阅读全文
摘要:
给你一个整数数组nums ,判断这个数组中是否存在长度为 3 的递增子序列 ####1. 贪心法 贪心更新两个最左端端点 class Solution { public: bool increasingTriplet(vector<int>& nums) { int len = nums.size( 阅读全文
摘要:
####1. 生产者-消费者问题(互斥+同步) 生产者把消息放入缓冲区,消费者从中取出信息,二者互斥访问 semaphore mutex = 1;//互斥访问缓冲区,因为有多个缓冲区资源 semaphore empty = n;//n个空闲区资源,内部互斥 semaphore full = 0;// 阅读全文
摘要:
####1. 返回尾零数量 可以转换为求质因子为2和5数量的较小值,实际上就是求质因子为5的数量 class Solution { public: int trailingZeroes(int n) { int ans = 0; for (int i = 5; i <= n; i += 5) //遍 阅读全文
摘要:
给定排序好的数组 arr ,两个整数 k 和 x ,从数组中找到最靠近 x(两数之差最小)的 k 个数。返回的结果必须要是按升序排好的 ####1. 通用调库解法 class Solution { public: vector<int> findClosestElements(vector<int> 阅读全文