Skip to content

Commit a7ce3c8

Browse files
authored
feat: 每日一题-2019-09-19
1 parent dfe1c1d commit a7ce3c8

File tree

1 file changed

+100
-0
lines changed

1 file changed

+100
-0
lines changed

Diff for: daily/2019-08-19.md

+100
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
## 每日一题 - 593. 有效的正方形
2+
3+
### 信息卡片
4+
5+
- 时间:2019-06-08
6+
- 题目链接:https://leetcode.com/problems/top-k-frequent-elements/description/
7+
- tag:`Hash Table` `Heap`
8+
9+
### 题目描述
10+
11+
```
12+
Given a non-empty array of integers, return the k most frequent elements.
13+
14+
Example 1:
15+
16+
Input: nums = [1,1,1,2,2,3], k = 2
17+
Output: [1,2]
18+
19+
Example 2:
20+
21+
22+
Input: nums = [1], k = 1
23+
Output: [1]
24+
25+
Note:
26+
27+
You may assume k is always valid, 1 ≤ k ≤ number of unique elements.
28+
Your algorithm's time complexity must be better than O(n log n), where n is
29+
the array's size.
30+
```
31+
32+
33+
34+
### 参考答案
35+
36+
模仿 [@raof01](https://github.com/raof01) 的思路写的JS代码,
37+
38+
基本思路就是: 证明四个角都是直角, 而证明直角的方式就是边长关系。
39+
40+
四个点一共有六个连接的线段,其中两个是对角线,另外四个是边。
41+
42+
对于直角来说,满足“a * a + b * b = c * c”, 由于是正方形,所以a = b, 因此c就等于
43+
2 * a * a , 其中a为边长,c就是对角线的长度。
44+
45+
46+
我们分别计算出距离的平方,如果有四个相同,另外两个相同。 且二者的关系可以满足直角,那么他就有四个直角,他就是一个正方形
47+
48+
```js
49+
/*
50+
* @lc app=leetcode id=593 lang=javascript
51+
*
52+
* [593] Valid Square
53+
*/
54+
function square(p1, p2) {
55+
const deltaX = p1[0] - p2[0];
56+
const deltaY = p1[1] - p2[1];
57+
58+
return deltaX * deltaX + deltaY * deltaY;
59+
}
60+
/**
61+
* @param {number[]} p1
62+
* @param {number[]} p2
63+
* @param {number[]} p3
64+
* @param {number[]} p4
65+
* @return {boolean}
66+
*/
67+
var validSquare = function (p1, p2, p3, p4) {
68+
// 证明四个角都是直角
69+
// 证明直角的方式就是边长关系
70+
const squares = [
71+
square(p1, p2),
72+
square(p1, p3),
73+
square(p1, p4),
74+
square(p2, p3),
75+
square(p2, p4),
76+
square(p3, p4)
77+
];
78+
let cnt1 = 0;
79+
let cnt2 = 0;
80+
let sum = 0;
81+
82+
for(let i = 0; i < squares.length; i++) {
83+
sum += squares[i];
84+
}
85+
86+
for(let i = 0; i < squares.length; i++) {
87+
if (sum === 8 * squares[i]) {
88+
cnt1++;
89+
} else if(sum === 4 * squares[i]) {
90+
cnt2++;
91+
}
92+
}
93+
94+
return cnt1 === 4 && cnt2 ===2;
95+
96+
}
97+
```
98+
### 其他优秀解答
99+
100+
暂无

0 commit comments

Comments
 (0)