天有不测风云,人有旦夕祸福。蜈蚣百足,行不及蛇;雄鸡两翼,飞不过鸦。马有千里之程,无骑不能自往;人有冲天之志,非运不能自通。
盖闻:人生在世,富贵不能淫,贫贱不能移。文章盖世,孔子厄于陈邦;武略超群,太公钓于渭水。颜渊命短,殊非凶恶之徒;盗跖年长,岂是善良之辈。尧帝明圣,却生不肖之儿;瞽叟愚顽,反生大孝之子。张良原是布衣,萧何曾为县吏。晏子身无五尺,封作齐国宰相;孔明卧居草庐,能作蜀汉军师。楚霸虽雄,败于乌江自刎;汉王虽弱,竟有万里江山。李广有射虎之威,到老无封;冯唐有乘龙之才,一生不遇。韩信未遇之时,无一日三餐,及至遇行,腰悬三齐玉印,一旦时衰,死于阴人之手。
有先贫而后富,有老壮而少衰。满腹文章,白发竟然不中;才疏学浅,少年及第登科。深院宫娥,运退反为妓妾;风流妓女,时来配作夫人。
青春美女,却招愚蠢之夫;俊秀郎君,反配粗丑之妇。蛟龙未遇,潜水于鱼鳖之间;君子失时,拱手于小人之下。衣服虽破,常存仪礼之容;面带忧愁,每抱怀安之量。时遭不遇,只宜安贫守份;心若不欺,必然扬眉吐气。初贫君子,天然骨骼生成;乍富小人,不脱贫寒肌体。
天不得时,日月无光;地不得时,草木不生;水不得时,风浪不平;人不得时,利运不通。注福注禄,命里已安排定,富贵谁不欲?人若不依根基八字,岂能为卿为相?
余者,居洛阳之时,朝投僧寺,夜宿破窑。布衣不能遮其体,饘粥不能充其饥。上人嫌,下人憎,皆言余之贱也,余曰:非贱也,乃时也,运也,命也。余后登高及第,入中书,官至极品,位列三公,思衣则有绮罗千箱,思食则有百味珍馐,有挞百僚之杖,有斩佞臣之剑,出则壮士执鞭,入则佳人扶袂,廪有余粟,库有余财,人皆言余之贵也,余曰:非贵也,乃时也,运也,命也。
嗟呼!人生在世,富贵不可尽用,贫贱不可自欺,听由天地循环,周而复始焉。
LC160.相交链表
本文字数: 1.7k 阅读时长 ≈ 2 分钟
题目地址160. 相交链表
https://leetcode-cn.com/problems/intersection-of-two-linked-lists/
题目描述
给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。
图示两个链表在节点 c1 开始相交:
题目数据 保证 整个链式结构中不存在环。
注意,函数返回结果后,链表必须 保持其原始结构 。
示例 1:
LC344.翻转字符串
本文字数: 909 阅读时长 ≈ 1 分钟
题目地址
https://leetcode-cn.com/problems/reverse-string/
题目描述
1 | 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 |
前置知识
- 双指针 两端指针
公司
- 暂无
思路
简单的双指针中的两端指针,两个指针指向的元素相互对调
LC19.删除链表的倒数第N个节点
本文字数: 1.8k 阅读时长 ≈ 2 分钟
题目地址(19. 删除链表的倒数第 N 个结点 labuladong 题解)
https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/
题目描述
1 | 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 |
前置知识
- 双指针 快慢指针
公司
- facebook 微软
思路
思路来源
这道题使用的是双指针中的快慢指针,采用快慢指针中的主要想法为求中点的部分,利用快慢指针步伐不一致的特点求解答案。
此题类似于求终点,但是更具有技巧性,三种递进式思考如下:
LC125.验证回文串
本文字数: 1.4k 阅读时长 ≈ 1 分钟
题目地址(125. 验证回文串)
https://leetcode-cn.com/problems/valid-palindrome/
题目描述
1 | 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。 |
前置知识
- 双指针,两端指针
公司
facebook,google
思路
常规思路非常简单,一共分两步:第一步,将除大写字母,小写字母和数字提取出来,添加到一个新的字符串中;第二步,设置两端指针,两个指针指向的位置进行比较,如果不相同直接返回false,相同则向内收缩,知道两端指针相同或者反向错位。
关键点
双指针,两端指针
代码
- 语言支持:Java
LC88.合并两个有序数组
题目地址(88. 合并两个有序数组)
https://leetcode-cn.com/problems/merge-sorted-array/
题目描述
1 | 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 |
前置知识
- 双指针 排序方式
公司
- 字节,facebook,微软
思路
最简单的思路,两步:第一,将nums2的数组添加到nums1中,因为题目已经预设了nums1的长度是两个数组的长度和;第二,将nums1中的所有元素重新排序即可。总体来说,想要解答很简单
LC141.环形链表
题目地址(141. 环形链表)
https://leetcode-cn.com/problems/linked-list-cycle/
题目描述
1 | 给定一个链表,判断链表中是否有环。 |
前置知识
- 双指针中的快慢指针,通过快慢指针在双指针的性质来判断
公司
- 字节跳动
思路
利用的是双指针中快慢指针在单链表中是否存在环的判断,慢指针一次一步,快指针一次两步,如果两个指针如果两个指针相遇则一定存在环,反之也成立(直接使用即可)
双指针类型以及应用场景
本文字数: 478 阅读时长 ≈ 1 分钟
双指针可以分为两类,一类是「快慢指针」,一类是「左右指针」。前者解决主要解决链表中的问题,比如典型的判定链表中是否包含环;后者主要解决数组(或者字符串)中的问题,比如二分查找。
快慢指针的常用的算法
快慢指针初始阶段一般都指向头结点head,前进时快指针fast在前,慢指针slow在后,可以解决链表中的某些问题。
判断链表中是否有环
单链表的特点是每个节点只知道下一个节点,所以一个指针无法确定链表中的是否存在环。
如果链表中不含环,那个这个指针最终会遇到空指针null表示链表到头了,这可以表示链表中不存在环
1 | boolean hasCycle(ListNode head) { |
但是如果链表中存在环,那么这个指针就会陷入死循环,因为环形数组中无法提供用来作为结束的null指针。
经典解法就是使用两个指针,一个快指针,一个慢指针。如果不含环,快指针一定会遇到null指针,表示已经到头,证明不含环;如果含有环,快指针最终会和慢指针相遇,这就表明两边含环。
LC27.移除元素
题目地址(27. 移除元素)
https://leetcode-cn.com/problems/remove-element/
题目描述
1 | 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 |
前置知识
- 双指针
- 两端指针
公司
- 字节跳动 谷歌
思路
思路比较简单,使用双指针,一个用来表紧检索到的位置(left),一个用来标记可以交换的位置(right),当left遍历到非法数字(val)的时候,与right所在的合法字符串进行位置交换,因为这里题目不考虑顺序问题,所以直接交换就可以。最后输出right+1
LC412.字符串相加
题目地址(415. 字符串相加)
https://leetcode-cn.com/problems/add-strings/
题目描述
1 | 给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。 |
前置知识
- StringBuilder ASCII值
公司
- 字节跳动,百度等