摘要:
对每个询问,先找出符合实际房间体积,大于询问房间体积房间的房间号,之后再从这些符合条件的候选答案中挑选一个最接近询问房间ID号的。 为了找出符合条件的房间,可以对实际房间、询问房间,按照房间体积降序排序,然后只将大于等于询问房间体积的房间ID,加入到待筛选的房间列表中。因为对于小于询问房间体积的房间 阅读全文
摘要:
题目要求进入考场的学生必须是离别人最远的,那么可以想到用一个最大堆维护区间长度,这样每次插入都只需要在堆头部插入新区间即可。 要注意,当区间的一端不在首尾时,区间长度除以2是新加入的学生距离两边的距离;而区间有一端在首尾时,为了方便计算,令左端点为-1,右端点为N,这样,区间长度就等于区间的右端点 阅读全文
摘要:
根据题意,使用模拟解法,维护一个最小堆,始终对堆的第一个元素做乘,然后每次运算后维护堆。在实现的时候保存原有的下标,可以很方便的输出答案,有实现如下: class Solution { public: vector<int> getFinalState(vector<int>& nums, int 阅读全文
摘要:
考虑arr1可以取到的数字组合数,从0到i+1位置的合法的arr1组合数,可以从0到i的组合数得到。因此可以想到用动态规划解决问题,使用一个数组dp[i][j]代表arr1[i] = j时,前i + 1个数字有多少个组合。这样一来,最终的答案即为sum(dp[n-1][0...M],其中M为nums 阅读全文
摘要:
是思路题,其实能想到的话是很简单的。首先,用3243的图遍历搜索方法肯定是会超时的,然后注意到用例跟3243不一样的是,询问集合里没有交集,那么就可以定下一个策略"在有捷径就走捷径的情况下,答案是最优的",这个策略在该题里是正确的。 因此可以通过计算捷径覆盖的区域,然后用n-1减去这个区域的长度即可 阅读全文
摘要:
看了题目的两个初始用例,感觉能用前缀和和滑动窗口来解决,前缀和设定为从下标0到当前位置所有符合条件的答案数量,于是先写了一个: vector<long long> countKConstraintSubstrings(string s, int k, vector<vector<int>> &que 阅读全文
摘要:
一眼就知道是滑动窗口了,但是中间遇上了很多小问题一时没有转过弯来。。。 首先写一个朴素的滑动窗口来尝试一下 vector<int> resultsArray(vector<int> &nums, int k) { if (k == 1) return nums; int n = nums.size( 阅读全文
摘要:
记录一下写法,有时候百度文心一言出来的并不是很准确。 对于一个结构如: struct Point { double dX; double dY; double dZ; }; std::vector<Point> vecPoint; 随意的在其中插入一点数据后,有两种写法求解拟合平面方程参数。 用Qr 阅读全文
摘要:
题目要求输出结果为处理后数组的最大值与最小值之差。当同时增大或减小所有的数时,处理后的数组和原数组的答案是一样的,想要减小最终答案,需要对两类数字分别进行增大和减小。 由增大得到的最大值,与由减小得到的最小值两者组成的答案,才有可能比原数组中的答案要大。因此,最终得到的答案一定是由减小而得到的最大值 阅读全文
摘要:
一开始想的很简单,觉得在数组两端维护两个下标,用贪心的方法模拟取数字。 class Solution { public: int takeCharacters(string s, int k) { int left = 0, right = s.size() - 1; if(k == 0) retu 阅读全文