2021 leetcode 春季赛
赛前立个flag,做出四三道题 比起去年还是进步了, 去年就做了两道题,败在了dp 上。 今年的战绩:
接下来讲解下ac的题目 由于篇幅有限只提供题目,忽略用例,所有解答代码见note 1.采购方案 小力将 N 个零件的报价存于数组 nums。小力预算为 target,假定小力仅购买两个零件,要求购买零件的花费不超过预算,请问他有多少种采购方案。
注意:答案需要以 1e9 + 7 (1000000007) 为底取模,如:计算初始结果为:1000000008,请返回 1
第一想法就是先排序,接下来有两个做法
二分,遍历每个数 ni,二分找到下标j ,使得恰巧使得 nums[i]+nums[j] <=target;ans+=j-i 双指针,做法和上述类似,初始化两个下标i,j ,每次移动i,同时移动j 恰巧使得nums[i]+nums[j] <=target ;ans+=j-i 2.乐团站位 某乐团的演出场地可视作 num * num 的二维矩阵 grid(左上角坐标为 [0,0]),每个位置站有一位成员。乐团共有 9 种乐器,乐器编号为 1~9,每位成员持有 1 个乐器。 为保证声乐混合效果,成员站位规则为:自 grid 左上角开始顺时针螺旋形向内循环以 1,2,...,9 循环重复排列。例如当 num = 5 时,站位如图所示 注意:答案需要以 1e9 + 7 (1000000007) 为底取模,如:计算初始结果为:1000000008,请返回 1
由于数据量限制普通的模拟都会超时,所以需要找到数学规律。 我的做法是先根据坐标判断当前是第几圈,我们假设是q(q从0开始) $$q = min(x,y,num-1-x,num-1-y)$$ 通过观察得出每一圈都比外圈少8个数(长度少2,四条边就少8),我们可以根据等差数列公式算出q圈第一个坐标经过多少个数。等差数列通项公式: $$\sum\limits_{n=1}^Na_n = na_1 + \frac{n(n-1)}{2}d $$