独身越久越难脱单
前一阵子在网上看到一句话 —— 独身越久越难脱单
作为大龄独身程序猿的我深以为然,甚至觉得独身的时刻久了,真的会丧失和异性相处的能力。
以我个人的日子感受(当然不能代表其他所有人独身都是这个原因)来说,恶性循环 主要包含以下点
独身 -> 宅家不爱出门 -> 奶茶甜品不离手,身段走样 -> 缺少运动和面对面交际 -> 圈子变小、逐渐社恐 -> 独身
而一旦堕入以上的恶性循环,脱单可不就越来越难了吗?
所以我决议今日下定决计 打破 这个循环,那就先从 身段管理(健身瘦身) 开始!
网上有句话说的很好 —— 一个连自己身体都无法掌控的人,怎么掌控人生!
一个人的身段,25岁前,是爹妈给的;25岁之后,是自己修的。
能管好自己身段的人,往往能管理好自己的日子和工作。反之,臃肿的身段背面,可能是一团乱糟糟的日子。
肥胖,给工作带来影响,日子质量也大打折扣,还谈什么奋斗拼搏呢?
下定决计后,立刻用吃奶的力气做了两下卧推。。。哎呀妈呀,太累了!
点杯 奶茶 弥补弥补能量吧~ 有能量才有力气训练 ~
可是究竟我不是个 没羞没臊 的人,因为喝了奶茶,心里仍是有一丢丢 愧疚感 的,所以打算出门散步散步。顺便缓解一下自己社恐的症状,暂时脱离虚拟的二次元日子,测验融入一下现实社会。当我正在街上掉以轻心的向前走着时,突然迎面走来一个妹子,朱唇玉面,头发梳个丸子头,身穿碎花裙子,曼妙身段呼之欲出。
我远远看去,感觉妹子仿佛在和我浅笑,可是当妹子越走越近,社恐又羞涩的我没敢和她对视,而是挑选低头默默地持续往前走。可是走着走着,脑中一个声响狠狠地怒斥我:“ShaderJoy,你出门不就是为了打破恶性循环的吗?既然上天都给你组织了这样的一个千载一时的时机,你都不挑选掌握,你都这么大年龄了,还怕个什么鸡毛?就算被拒绝身上能掉块肉吗?”
言之有理啊!这个心灵的声响
我从头鼓起了勇气,稍稍加快了脚步往回走寻找妹子的踪影。可是走了一会,却再没看到妹子的身影,我登时感到有些绝望,后悔其时自己没有好好掌握时机,公然世上没有后悔药。。。
正在我内心沮丧的时分,好巧不巧的,妹子居然出现在我前方不远处,本来她也在往回走!莫非她也是来找我的吗?!天呐,莫非我这个大龄独身猿今日总算要逆天走 “狗屎运” 。。。啊呸,“桃花运” 了嘛!~
我整理了一下衣服,当妹子走到我跟前的时分,我仿佛看见了她又轻轻冲我一笑,此时我决计一定要掌抓住这次时机上前和她搭讪了,刚说:“你好……”。
谁知 “好” 字还没说出口,妹子就惊恐地 “咻” 得一下以光速 “弹开” 了,脸上还满是嫌弃的表情,躲得远远的,然后敏捷消失,留我一人尬在原地,本来上面的那一切都是我的幻觉。。。她压根没有对我浅笑,哪有什么狗血纯爱偶像剧的上天组织。。。
跟着我这次的搭讪失利,我又回到了上面的 “恶性循环” 圈子里。。。
算法感悟
不过没关系,我又经过这次沉痛的失利,悟出了关于算法的道理 —— 我所身处的 恶性循环 不就很类似 LeetCode 61 Rotate List (旋转链表) 嘛,命运之轮一直在周而复始的循环旋转。。。
好了,为了简单起见举个比如,原链表如下,
即 l = 5
1->2->3->4->5->nullptr
k = 2
的情况下
4->5->1->2->3->nullptr
///@note 代码原作者: Huahua
/// 具体注释:ShaderJoy
class Solution {
public:
ListNode* rotateRight(ListNode* head, int k) {
if (!head) return head;
int l = 1; ///< 记载链表的长度,默认为 1
ListNode* tail = head; ///< 尾指针,初始化指向链表头部
while (tail->next) { tail = tail->next; ++l; } ///< 遍历链表,记载链表的长度,同时尾指针指向链表尾部
k %= l; ///< 由所以循环链表,所以需要扫除成果重复的步数,得到实践的旋转次数
if (k == 0) return head; ///< 无需循环
/// @note ★
ListNode* prev = head; ///< 效果:指向要操作结点的前一个结点。初始为链表头部
while (--l > k) prev = prev->next; ///< prev 向后移动 l-k-1 步 【比如中的 3】
ListNode* new_head = prev->next; ///< 然后保存 prev 后边的结点作为新头 【比如中的 3 所指的下一个,是 4】
tail->next = head; ///< 将旧头链接到链表尾部 【比如中的 1】
prev->next = nullptr; ///< 处理新尾部 【比如中的 3 所指的下一个,断开 4】
return new_head;
}
};
其间为了加深记忆,再次将 关键步骤 ★ 总结如下
- 将
prev
移动到待操作(新头)结点的前一个结点; - 保存待操作结点为
new_head
; - 将
head
链接到链表尾端; - 断开
prev
和原先其下一个(即新头)结点的链接
结尾
好了,算法挺简单的,几句话就介绍完了,我要去默默疗伤了(期望我的沉痛阅历可以让大家对这个算法题目和代码有深刻印象,那也就值了)
我正在参与掘金技能社区创作者签约方案招募活动,点击链接报名投稿。