我总是不太聪明的样子,但是我总是想让自己变聪明的路上
思路:
先对数组进行排序
找到题目中提到的x
如果排序后的最后一个元素为0,那么整个数组也就全为0了
class Solution {
public:
int minimumOperations(vector& nums) {
//每次减去x之后,重新排序,若最后一个元素为0即结束
int res=0;
int n=nums.size();
int x=999;
sort(nums.begin(),nums.end());
while(nums[n-1]!=0){
//找每一次的x
for(int i=0;i0 &&nums[i]0){
nums[i]-=x;
}
}
// for(int i=0;i
思路二:
一次操作去掉一个非零值,需要几次操作能把数组中的所有元素转化为零
本题可以转化为求数组中的不重复的非零元素的个数。
class Solution {
public:
int minimumOperations(vector& nums) {
unordered_set s;
for(int num:nums){
if(num>0){
s.insert(num);
}
}
return s.size();
}
};
思路:
- 学生总数一定是按照1,2,3…去进行划分
- 如果我把数组进行排序,优先选择最小的,那么肯定尽可能的得到更多的组数
- 对于题目第一个条件,按照递增数组的性质,一定是可以满足的
class Solution {
public:
int maximumGroups(vector& grades) {
int n=grades.size();
return int( ((sqrt(1+8*n)-1)/2) );
}
};
方法二:类似1
直接按照分组条件2解决就行,即第1组1个人,第2组2个人,依次类推,最后一组不符合的算到前一组上。
可以这样理解,把这些数据从小到大排序,示例[10,6,12,7,3,5]排序过后为[3,5,6,7,10,12],然后我们看,按照以1为差做等差,后一组的和一定是大于前一组的,所以我们需要关注的就只有所有数据按照条件2能分成几组了
class Solution {
public:
int maximumGroups(vector& grades) {
int n=grades.size();
sort(grades.begin(),grades.end());
int res=0;
while(n-res>res){
n-=res;
res++;
}
return res;
}
};
思路:求出给出的两个点到每一个点的距离,取出其中一个点到相应点最大的,同时保证整体是最小的
class Solution {
public:
int closestMeetingNode(vector& edges, int node1, int node2) {
int n =edges.size();
int dis_min=n;
int ans =-1;
auto cal_dis = [&](int x)->vector{
vector dist(n,n);
for(int d=0;x>=0&&dist[x]==n;x=edges[x]){
dist[x] =d++;
}
return dist;
};
auto d1= cal_dis(node1);
auto d2 =cal_dis(node2);
for(int i=0;i
通过采用时间戳记录的方式
class Solution {
public:
int longestCycle(vector& edges) {
int n = edges.size(), time[n], ans = -1;
memset(time,0,sizeof(time));
//循环遍历每一个点,起始的时间戳为1
for (int i = 0, clock = 1; i < n; ++i) {
//如果该点已经被访问,跳过
if(time[i])continue;
//循环遍历当前结点相邻的结点
for (int x = i, start_time = clock; x >= 0; x = edges[x]) {
// //如果该结点已经被访问
if(time[x]){
//看看当前的时间是否大于起始时候的时间
if(time[x]>=start_time)
//大于0,则说明找到一个环
ans = max(ans,clock-time[x]);
break;
}
time[x] = clock++;
}
}
return ans;
}
};
总结:
时隔两周,才把上上星期的周赛给补上。最主要的是后面两题,本想着刷完图再来补,后面也没有再去刷图了。于是乎就通过看题解来补上吧!本次周赛的后两题都是图论的题目!看了灵佬的解析,都有说到基环树这个知识点还没有看,准备这个星期给看了!
题目我感觉好难!!!有点重创心灵。每次周赛要么一道题要么两道题!真的脑子不好用,转不过来,有时候看题解也不太理解。
就给自己打打气吧!一步一个脚印,慢慢提高!