leetcode267周赛
巨大的打击啊,一个半小时才做了一道题,做题期间还那么烦,心不静,想那些没用的东西,有太多无用的想法分散了注意力!
心不静导致第二题根本抓不到细节,提交->错误->修改->提交,循环往复,根本没什么效率,第二题按自己的方法细节很多,却根本静不下心;
向第二题这种,不能烦,越烦越做不下去,再烦也要做啊,真正的考试或比赛,烦了就不做了???都19了,连这点胸怀都没有?连这点耐心都没有?
你努力?努力个p!总是容易冲动,静下来好好做事,累了就休息下,硬撑后烦了,又想做,陷入恶性循环。。。愚蠢至极!!!
写代码多有意思!攻克一个又一个难题多么有成就感!这就像打游戏过了一关又想过下一关,多么有意思!你为什么会出现烦躁情绪 ?
昨晚不是刚看完电影? 还不够放松? 可以了兄弟!放下自己不成熟,冲动的态度,稳重一点,放下那些根本不重要的情绪和心情,放下那些根本没有意义的东西,专注于 提升自己,
专注于让自己一步一步地升级,然后去闯关,最后越来越高,享受那些成就感,不爽吗?!!!要学会正向激励自己,正向激励!!!
而不是那种貌似感天动地,貌似很悲壮的自律,那是自欺欺人!!! 欣赏成就感,是最舒服的自慰!!!
冲,攻克一个有一个的难题,去享受成绩感,去提升自己,让自己做什么事情,面对任何挑战都能够游刃有余!!!
当然心理精力解决了,的确会出现大脑精力和体力精力的缺失,大脑精力缺失就睡觉,听轻松音乐,体力精力缺失就吃饭,吃水果!!!
-------------废话截止--------------------------
My silly code:
//https://leetcode-cn.com/problems/reverse-nodes-in-even-length-groups/
#include
using namespace std;
//Definition for singly-linked list.
struct ListNode {
int val;
ListNode *next;
ListNode() : val(0), next(nullptr) {}
ListNode(int x) : val(x), next(nullptr) {}
ListNode(int x, ListNode *next) : val(x), next(next) {}
};
class Solution {
public:
ListNode* reverseEvenLengthGroups(ListNode* head) {
ListNode* fmr=head,* p=head,*q=head->next;
int i=1,k=1;
while (1){
if (i==k*(k+1)/2){
int cont=0;
ListNode* tmp=q;
while (tmp!=NULL && cont!=k+1){
cont++;
tmp=tmp->next;
}
if (k&1 && cont&1) break;
if ((k&1)==0 && cont && (cont&1)==0) {
tmp=fmr->next;
tmp->next=q;
fmr->next=p;
fmr=tmp;
p=q;
q=q->next;
++i;
k+=2;
continue;
}
}
if (i==k*(k+1)/2+1) ++k;
if (k&1){
if (i==k*(k+1)/2) fmr=p;
if (q==NULL) break;
p=q;q=q->next;i++;
}
else{
ListNode* tmp;
if (i==k*(k+1)/2 || q==NULL){
tmp=fmr->next;
tmp->next=q;
fmr->next=p;
if (q==NULL) break;
p=q;
q=q->next;++i;
}
else{
tmp=q->next;
q->next=p;
p=q;
q=tmp;
++i;
}
}
}
return head;
}
};
Conclusion:
1. Details are often in the connecting nodes
2. pay attention to the beginning and the end circumstances
3. pay attention to the change of some important value
第四题考察并查集,记得大一好像学过,但这时候就忘了,为啥子?没有领悟出其中精妙的算法思想,仅仅是看懂了算法的步骤而已,不过是浅层次阅读而已!
tutorial
自己写的模版(好吧,其实这根本不是模版,没有泛型编程。。。)
#ifndef _UNION_FIND
#define _UNION_FIND
class UnionFind{
private:
int* fa;
int* rank;
public:
UnionFind(int maxbd){
fa=new int[maxbd+1];
rank=new int[maxbd+1];
for (int i=0;i
领悟:
并查集最核心的思想便是将根节点作为代表,去处理不同集合之间的关系,进行合并和查询;
而下面的这一题就是利用了这种思想,赋予根节点多了一个功能--判断有限制的集合不能融合
267周赛第四题
my_ac_code
class Solution {
private:
int* fa;
int* rank;
public:
void init(int maxbd){
fa=new int[maxbd+1];
rank=new int[maxbd+1];
for (int i=0;i friendRequests(int n, vector>& restrictions, vector>& requests) {
vector ans;
init(n);
int rst[n][n];
memset(rst,0,sizeof(rst));
int rstnum=(int)restrictions.size();
for (int i=0;i