forked from azl397985856/leetcode
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
32 changed files
with
1,432 additions
and
78 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,9 @@ | ||
# LeetCode | ||
|
||
[![Travis](https://img.shields.io/badge/language-C++-green.svg)]() | ||
[![Travis](https://img.shields.io/badge/language-JavaScript-yellow.svg)]() | ||
[![Travis](https://img.shields.io/badge/language-Python-red.svg)]() | ||
[![Travis](https://img.shields.io/badge/language-Java-blue.svg)]() | ||
![历史共访问次数](https://visitor-count-badge.herokuapp.com/total.svg?repo_id=azl397985856.leetcode) | ||
![今天被访问次数](https://visitor-count-badge.herokuapp.com/today.svg?repo_id=azl397985856.leetcode) | ||
|
||
|
@@ -12,13 +16,13 @@ | |
![leetcode.jpeg](./assets/leetcode.jpeg) | ||
|
||
这个是我写的[纪念项目 Star 突破 1W 的一个短文](./thanksGiving.md), 记录了项目的"兴起"之路, 大家有兴趣可以看一下, | ||
如果对这个项目感兴趣,请点击一下Star, 项目会长久更新,感谢大家的支持。 | ||
如果对这个项目感兴趣,请**点击一下Star**, 项目会**持续更新**,感谢大家的支持。 | ||
|
||
## 介绍 | ||
|
||
leetcode 题解,记录自己的 leetcode 解题之路。 | ||
|
||
本仓库目前分为五个部分: | ||
本仓库目前分为**五个**部分: | ||
|
||
- 第一个部分是 leetcode 经典题目的解析,包括思路,关键点和具体的代码实现。 | ||
|
||
|
@@ -34,18 +38,12 @@ leetcode 题解,记录自己的 leetcode 解题之路。 | |
## 关于我 | ||
|
||
我是一个对技术充满兴趣的程序员, 擅长前端工程化,前端性能优化,前端标准化等。 | ||
擅长前端工程化,前端性能优化,前端标准化等,做过.net, 搞过Java,现在是一名前端工程师,我的个人博客:https://lucifer.ren/blog/ | ||
|
||
做过.net, 搞过Java,现在是一名前端工程师。 | ||
我经常会在开源社区进行一些输出和分享,比较受欢迎的有[宇宙最强的前端面试指南](https://github.com/azl397985856/fe-interview) | ||
和[我的第一本小书](https://github.com/azl397985856/automate-everything)。目前本人正在写一本关于《leetcode题解》的实体书,因此可能更新会比较慢,如果有人想要做些贡献或者合作的也可以直接用下面的邮箱联系我。 | ||
|
||
除了我的本职工作外,我会在开源社区进行一些输出和分享,比较受欢迎的有[宇宙最强的前端面试指南](https://github.com/azl397985856/fe-interview) | ||
和[我的第一本小书](https://github.com/azl397985856/automate-everything) | ||
|
||
目前本人正在写一本关于《leetcode题解》的实体书,因此可能更新会比较慢, | ||
如果有人想要做些贡献或者合作的也可以直接用下面的邮箱联系我。 | ||
|
||
另外如果大家需要内推的可以找我,我这里有包括阿里,腾讯,头条,网易等很多公司的朋友。 | ||
有需要可以直接群里联系我,或者发送到我的个人邮箱 [[email protected]]。 | ||
另外如果大家需要内推的可以找我,我这里有包括阿里,腾讯,头条,网易等很多公司的朋友。有需要可以直接群里联系我,或者发送到我的个人邮箱 [[email protected]]。 | ||
|
||
## 食用指南 | ||
|
||
|
@@ -120,7 +118,7 @@ leetcode 题解,记录自己的 leetcode 解题之路。 | |
|
||
### leetcode 经典题目的解析 | ||
|
||
> 这里仅列举具有代表性题目,并不是全部题目 | ||
> 这里仅列举具有**代表性题目**,并不是全部题目 | ||
#### 简单难度 | ||
|
||
|
@@ -227,8 +225,10 @@ leetcode 题解,记录自己的 leetcode 解题之路。 | |
- [0877.stone-game](./problems/877.stone-game.md) | ||
- [0887.super-egg-drop](./problems/887.super-egg-drop.md) | ||
- [0900.rle-iterator](./problems/900.rle-iterator.md) | ||
- [0912.sort-an-array](./problems/912.sort-an-array.md) 🆕 | ||
- [1031.maximum-sum-of-two-non-overlapping-subarrays](./problems/1031.maximum-sum-of-two-non-overlapping-subarrays.md) | ||
- [1218.longest-arithmetic-subsequence-of-given-difference.md](./problems/1218.longest-arithmetic-subsequence-of-given-difference.md) 🆕 | ||
|
||
#### 困难难度 | ||
|
||
- [0004.median-of-two-sorted-array](./problems/4.median-of-two-sorted-array.md) 🆕 | ||
|
@@ -300,16 +300,13 @@ anki - 文件 - 导入 - 下拉格式选择“打包的 anki集合”,然后 | |
|
||
## 关注我 | ||
|
||
最近我重新整理了下自己的公众号,并且我还给他换了一个名字`脑洞前端`,它是一个帮助你打开大前端新世界大门的钥匙🔑,在这里你可以听到新奇的观点,看到一些技术尝新,还会收到系统性总结和思考。 | ||
|
||
由于微信`一个自然人只能有一个订阅号`的限制, 现在我也会放一些leetcode题解在这个号上面, | ||
后期考虑出一个leetcode模块或者想办法开另外一个公众号。 | ||
我重新整理了下自己的公众号,并且我还给它换了一个名字`脑洞前端`,它是一个帮助你打开大前端新世界大门的钥匙 🔑,在这里你可以听到新奇的观点,看到一些技术尝新,还会收到系统性总结和思考。 | ||
|
||
在这里我会尽量通过图的形式来阐述一些概念和逻辑,帮助大家快速理解,图解是我的目标。 | ||
|
||
之后我的文章同步到微信公众号 `脑洞前端` ,您可以关注获取最新的文章,或者和我进行交流。 | ||
之后我的文章会同步到微信公众号 `脑洞前端` ,你可以关注获取最新的文章,并和我进行交流。 | ||
|
||
另外你可以回复leetcode拉你进微信群,如果想加入qq群,请回复qq。 | ||
另外你可以回复大前端进大前端微信交流群, 回复 leetcode 拉你进 leetcode 微信群,如果想加入 qq 群,请回复 qq。 | ||
|
||
|
||
<img width="300" src="./assets/gongzhonghao.jpeg"> | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
<mxfile modified="2019-09-14T09:21:59.588Z" host="www.draw.io" agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36" etag="pFvn7xNMapLTBJD5jPEq" version="11.2.8" type="device" pages="1"><diagram id="tFO1_1GZ6p5RLwFWiUon" name="第 1 页">7Zxdb6M4FIZ/TS4Tgc1HuEyyzaxWWmlHlWZ2584b3AQNwalxmmR+/ZhgoHBIp2FIcCX3og3HcBz8vLY5x6YjvNgeP3Gy2/zNQhqPkBUeR/iPEUIBtuXvzHDKDY7n54Y1j8LcZFeGx+gHVUZLWfdRSNPaiYKxWES7unHFkoSuRM1GOGeH+mlPLK7XuiNrCgyPKxJD69coFJvcOkV+Zf+TRutNUbPtBXnJlhQnqztJNyRkh1cm/DDCC86YyD9tjwsaZ21XtEt+3fJCafnFOE3Eey6YfVvG/y7/+0K+zl9Ou2/T57+eP4+VlxcS79UNu+rbilPRBJztk5BmXuwRnh82kaCPO7LKSg+SubRtxDZWxU8sEYqi7anjBYsZP/vCy+XUsixpj8n/NJ4zHlJeFCcskZfN1zFJM2jZWUzWE4lMOtPsMBWcfS85oNLyqoLg/CNL1I1RLujxYovZJQepX8q2VPCTPEVdgKZefonSrqdIHiohuMq0eaWBwkaU9Nal44qO/KAAXQELAVi2gVXAwlgvWNjAegOWZj3LAbCQgVXAcjTrWS6AZRlYJSzNepZnYF2G5WrWs4K7wwqCxeKjwHJrrMoIZShYRf2GVhst29INFwy1DK4Kl3a9CwZbt34k/EC4mpHx8LhguGVwXYyNh8cFA65bR8cfCZd2vQuGXJPJBACTdyzqVOrNpBr6KYrjhonE0TqRhyvZQlTa51n7RSsSz1TBNgrDrJpWGVRCsRocX6kCW2+oosG7jxGymO9Lhi5g6LQwRDdj6AOGI+TFGbB0R5IaSe95n2Wlz801Ts/tN5Mn2N7uWBXKT+vs79i1sohL+ZLfLXeXFxqNXBFRBLCb31ci01tJxDkPjkYi1z8XF0O/LhpBMOrsUSNTo5EOGvF00wgMdfvRiJll+ojVBpcHDK37kYdt5NEh2HBszeQBQ/l+5IGMPDrII9BNHjB10I88sJFHh+VG7UYPmKroRx6OkUcHeQS6PXvA9eh+5OEaeXRIgDi6yQMmycwi3cWNQIPnpRFMWBlcF7cCDY8L7i8xqz4XNwMNjgvDVJ9Z9XmboQd2nUyHndAwzLWYEbLC5TmadTmY+zC4Sly+rRsumIswuCpc2vWum+UGzNJVTwPw0AEgvlV+wKyAdx70A80kcquNNGYfTeeJRjeJwEAXAKRJOMveT85IZK0YrS4+CbQ3p3rPpT6p47ZJfbmcu37V1jQErzz/sqXfOWVzGhMRvdTdtzWvquEfFsmKq8Umqx4C4ymuu0jZnq+ouqqC9GtHqOFIEL6mAjg60y5v+zfeJ2zbJaOBAEKSbspHUe3V0NjX0l0NTUf3VkPbfhijhuvU4NjWxG3owemmhxZXyLmvImBaxijiakV4Tm+KgK7urYi2XS9GEdcpwrV7en4Aju49Y7RtcjFquFINfk/PD8DRvdUA81aRDMKOQBJaB4WoRYT+w8x7aMlUjn4/KGy+W6F61FAhoQMTSyvZasIwfD9DNPArVA7M/CT7bWoQvrX7HNXHTn9ohnDLSGCjScq4GJNkTDgnp0tAdaLo3JeiW6foYJhhw1YAOfrXc5SH1T/Fy6fQ6j8L4oef</diagram></mxfile> |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,100 @@ | ||
## 每日一题 - 593. 有效的正方形 | ||
|
||
### 信息卡片 | ||
|
||
- 时间:2019-06-08 | ||
- 题目链接:https://leetcode.com/problems/top-k-frequent-elements/description/ | ||
- tag:`Hash Table` `Heap` | ||
|
||
### 题目描述 | ||
|
||
``` | ||
Given a non-empty array of integers, return the k most frequent elements. | ||
Example 1: | ||
Input: nums = [1,1,1,2,2,3], k = 2 | ||
Output: [1,2] | ||
Example 2: | ||
Input: nums = [1], k = 1 | ||
Output: [1] | ||
Note: | ||
You may assume k is always valid, 1 ≤ k ≤ number of unique elements. | ||
Your algorithm's time complexity must be better than O(n log n), where n is | ||
the array's size. | ||
``` | ||
|
||
|
||
|
||
### 参考答案 | ||
|
||
模仿 [@raof01](https://github.com/raof01) 的思路写的JS代码, | ||
|
||
基本思路就是: 证明四个角都是直角, 而证明直角的方式就是边长关系。 | ||
|
||
四个点一共有六个连接的线段,其中两个是对角线,另外四个是边。 | ||
|
||
对于直角来说,满足“a * a + b * b = c * c”, 由于是正方形,所以a = b, 因此c就等于 | ||
2 * a * a , 其中a为边长,c就是对角线的长度。 | ||
|
||
|
||
我们分别计算出距离的平方,如果有四个相同,另外两个相同。 且二者的关系可以满足直角,那么他就有四个直角,他就是一个正方形 | ||
|
||
```js | ||
/* | ||
* @lc app=leetcode id=593 lang=javascript | ||
* | ||
* [593] Valid Square | ||
*/ | ||
function square(p1, p2) { | ||
const deltaX = p1[0] - p2[0]; | ||
const deltaY = p1[1] - p2[1]; | ||
|
||
return deltaX * deltaX + deltaY * deltaY; | ||
} | ||
/** | ||
* @param {number[]} p1 | ||
* @param {number[]} p2 | ||
* @param {number[]} p3 | ||
* @param {number[]} p4 | ||
* @return {boolean} | ||
*/ | ||
var validSquare = function (p1, p2, p3, p4) { | ||
// 证明四个角都是直角 | ||
// 证明直角的方式就是边长关系 | ||
const squares = [ | ||
square(p1, p2), | ||
square(p1, p3), | ||
square(p1, p4), | ||
square(p2, p3), | ||
square(p2, p4), | ||
square(p3, p4) | ||
]; | ||
let cnt1 = 0; | ||
let cnt2 = 0; | ||
let sum = 0; | ||
|
||
for(let i = 0; i < squares.length; i++) { | ||
sum += squares[i]; | ||
} | ||
|
||
for(let i = 0; i < squares.length; i++) { | ||
if (sum === 8 * squares[i]) { | ||
cnt1++; | ||
} else if(sum === 4 * squares[i]) { | ||
cnt2++; | ||
} | ||
} | ||
|
||
return cnt1 === 4 && cnt2 ===2; | ||
|
||
} | ||
``` | ||
### 其他优秀解答 | ||
|
||
暂无 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,66 @@ | ||
# 毎日一题 - 桶中取黑白球 | ||
|
||
## 信息卡片 | ||
|
||
* 时间:2019-08-21 | ||
* tag:`Math` `位运算` | ||
## 题目描述 | ||
``` | ||
有一个桶,里面有白球,黑球各100个,你必须用以下规则将球取出来: | ||
- 每次从桶里取两个球 | ||
- 如果两个球是相同的颜色,那么再放一个黑球 | ||
- 如果两个球是不同的颜色,那么再放一个白球。 | ||
问:最后一个球是黑球的概率是多少? | ||
``` | ||
|
||
## 参考答案 | ||
|
||
### 1. 数学分析原问题 | ||
|
||
首先我们来仔细读题看看我们有哪些知道的信息: | ||
|
||
- 不管什么情况,每次球的总数减1; | ||
- 两黑:黑球-1,白球0; | ||
- 两白:黑球+1,白球-2; | ||
- 一黑一白:黑球-1,白球0; | ||
- 最后两球只要不是一黑一白,最后一球都是黑; | ||
|
||
初始状态是100个黑球和100个白球,从上面三个状态可知道,黑球要么+1要么-1,而白球要么不变要么-2;在198次取球后,我们可知剩余两个球,现在假设剩余的两球为一黑一白,可以证明这是不存在的。 | ||
|
||
因为白球下降是以2的倍数下降,不可能从100下降至1,;故剩余两球肯定不是一黑一白的情况,那么最后一球的情况必然为黑。 | ||
|
||
|
||
### 2. 原问题拓展(n个黑球和m个白球) | ||
|
||
在n+m-2次取球后,剩余两个球。 | ||
|
||
由于我们知道白球数下降是以2的倍数下降,如果m为偶数的话,是不可能下降至1;即同上1,最后一球必为黑球。如果m为奇数的话,最后必然是k黑1白(k>=1),显然对于任意的k,要么剩余全是黑球,要么黑球不断减1,最后变为1黑1白。全黑和1黑1白最后的结果都是剩余一个白球。 | ||
|
||
得出结论,最后一球结果无关黑球数量(n>=0),仅与白球数量m有关。 | ||
|
||
- 如果白球m为奇数,最后一球必然白; | ||
- 如果白球m为偶数,最后一球必然黑; | ||
|
||
### 3. 抽象为数学模型,严格证明 | ||
|
||
不妨设黑球为0,白球为1; | ||
|
||
- 两黑:F(0,0) = 0;表示两个黑球生一黑; | ||
- 两白:F(1,1) = 0;表示两个白球生一黑; | ||
- 一黑一白:F(0,1) = 0;表示一个黑球一个白球生一白; | ||
|
||
仔细观察就会发现这个函数F就是XOR(异或); | ||
|
||
那么m个黑球和n个白球,就抽象为m个0和n个1作异或的结果;而且我们可知异或满足结合律和交换律(证明略,最简单的证明方法枚举)。 | ||
|
||
那么问题就很简单,对于任意多0,异或结果依然是0,所以对于任意多1,只需要考虑1个数的奇偶性就可判断最后剩余1个1还是0个1; | ||
|
||
结论同2: | ||
|
||
- 1(白球)的个数奇数,最后异或结果为1; | ||
- 1(白球)的个数偶数,最后异或结果为0; | ||
|
||
|
||
## 优秀解答 | ||
|
||
>暂缺 |
Oops, something went wrong.