这里是【代码之狐】的寒假总结
——欸?我寒假呢?
——还有正在享受寒假的同学们抓紧,你们的时间不多了
自1月16左右放假到现在开学,差不多30天吧(😢太短了)
我完成的小目标:
- ⭐️力扣刷题:完成230道题左右,其中Easy:Mid:Hard约为3:3:1
- ⭐️锻炼身体:主要是长肉(太廋了,不健康)+每天有一定量的运动
- ⭐️规律作息:从凌晨到了12点左右,争取12点之前
- 😢专业书:背几大本书回去的我是…
⭐️刷题总结:
一、刷题数
一共刷了230题(不是水题)、每天基本上8道题左右(其实是10题的,刚回去几天有点懒)
刷题记录达到了69219个字符(其实是包含了代码和题目描述),不过还是很欣慰…
二、周赛
算法能力有很大提高,主要是见多识广,现在基本上周赛AC前三题,小概率全AC,最好名次240多(主要是不会优化)
之前没怎么打过,
基本上算是从零开始火速上升了
基本上最后一题卡住,临近结束的时候找到了优化方法。
三、贴一道今天的周赛——【每日一题】
6015. 统计可以被 K 整除的下标对数目-Hard-第 281 场周赛
给你一个下标从 0 开始、长度为 n
的整数数组 nums
和一个整数 k
,返回满足下述条件的下标对 (i, j)
的数目:
0 <= i < j <= n - 1
且nums[i] * nums[j]
能被k
整除。
class Solution {
public long coutPairs(int[] nums, int k) {
int n=nums.length;
long[] m=new long[n];
Map<Integer,Integer> count=new HashMap<>();
for(int i=0;i<n;i++){
nums[i]%=k;
count.put(nums[i],count.getOrDefault(nums[i],0)+1);
m[i]=((long)k*nums[i])/gcd(k,nums[i]);
}
Map<Integer,Integer> dp=new HashMap<>();
long ans=0;
for(int i=0;i<n;i++){
if(nums[i]==0){
ans+=(n-1)*2-count.get(0)+1;
continue;
}
long mid_c=(long)m[i]/nums[i];
int f=1;
long mid=mid_c;
if(dp.get((int)mid_c)!=null){
ans+=dp.get((int)mid_c);
continue;
}
long s=0;
while(mid<k){
int g=0;
g=count.getOrDefault((int)mid,0);
if(mid==nums[i]){
g=g-1;
}
s+=g;
mid=mid_c*(++f);
}
dp.put((int)mid_c,(int)s);
ans+=s;
}
return ans/2;
}
int gcd(int a,int b){
return b==0?a:gcd(b,a%b);
}
}
结尾
题目来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems
⭐️关注作者,带你刷题,从简单的算法题了解最常用的算法技能(寒假每日一题)
⭐️关注作者刷题——简单到进阶,让你不知不觉成为无情的刷题机器,有问题请私信