mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-10 04:06:51 +08:00
Merge branch 'youngyangyang04:master' into master
This commit is contained in:
@ -744,6 +744,91 @@ var trap = function(height) {
|
|||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### TypeScript
|
||||||
|
|
||||||
|
双指针法:
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
function trap(height: number[]): number {
|
||||||
|
const length: number = height.length;
|
||||||
|
let resVal: number = 0;
|
||||||
|
for (let i = 0; i < length; i++) {
|
||||||
|
let leftMaxHeight: number = height[i],
|
||||||
|
rightMaxHeight: number = height[i];
|
||||||
|
let leftIndex: number = i - 1,
|
||||||
|
rightIndex: number = i + 1;
|
||||||
|
while (leftIndex >= 0) {
|
||||||
|
if (height[leftIndex] > leftMaxHeight)
|
||||||
|
leftMaxHeight = height[leftIndex];
|
||||||
|
leftIndex--;
|
||||||
|
}
|
||||||
|
while (rightIndex < length) {
|
||||||
|
if (height[rightIndex] > rightMaxHeight)
|
||||||
|
rightMaxHeight = height[rightIndex];
|
||||||
|
rightIndex++;
|
||||||
|
}
|
||||||
|
resVal += Math.min(leftMaxHeight, rightMaxHeight) - height[i];
|
||||||
|
}
|
||||||
|
return resVal;
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
动态规划:
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
function trap(height: number[]): number {
|
||||||
|
const length: number = height.length;
|
||||||
|
const leftMaxHeightDp: number[] = [],
|
||||||
|
rightMaxHeightDp: number[] = [];
|
||||||
|
leftMaxHeightDp[0] = height[0];
|
||||||
|
rightMaxHeightDp[length - 1] = height[length - 1];
|
||||||
|
for (let i = 1; i < length; i++) {
|
||||||
|
leftMaxHeightDp[i] = Math.max(height[i], leftMaxHeightDp[i - 1]);
|
||||||
|
}
|
||||||
|
for (let i = length - 2; i >= 0; i--) {
|
||||||
|
rightMaxHeightDp[i] = Math.max(height[i], rightMaxHeightDp[i + 1]);
|
||||||
|
}
|
||||||
|
let resVal: number = 0;
|
||||||
|
for (let i = 0; i < length; i++) {
|
||||||
|
resVal += Math.min(leftMaxHeightDp[i], rightMaxHeightDp[i]) - height[i];
|
||||||
|
}
|
||||||
|
return resVal;
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
单调栈:
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
function trap(height: number[]): number {
|
||||||
|
const length: number = height.length;
|
||||||
|
const stack: number[] = [];
|
||||||
|
stack.push(0);
|
||||||
|
let resVal: number = 0;
|
||||||
|
for (let i = 1; i < length; i++) {
|
||||||
|
let top = stack[stack.length - 1];
|
||||||
|
if (height[top] > height[i]) {
|
||||||
|
stack.push(i);
|
||||||
|
} else if (height[top] === height[i]) {
|
||||||
|
stack.pop();
|
||||||
|
stack.push(i);
|
||||||
|
} else {
|
||||||
|
while (stack.length > 0 && height[top] < height[i]) {
|
||||||
|
let mid = stack.pop();
|
||||||
|
if (stack.length > 0) {
|
||||||
|
let left = stack[stack.length - 1];
|
||||||
|
let h = Math.min(height[left], height[i]) - height[mid];
|
||||||
|
let w = i - left - 1;
|
||||||
|
resVal += h * w;
|
||||||
|
top = stack[stack.length - 1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
stack.push(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return resVal;
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
### C:
|
### C:
|
||||||
|
|
||||||
一种更简便的双指针方法:
|
一种更简便的双指针方法:
|
||||||
|
@ -486,5 +486,95 @@ var largestRectangleArea = function(heights) {
|
|||||||
return maxArea;
|
return maxArea;
|
||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
TypeScript:
|
||||||
|
|
||||||
|
> 双指针法(会超时):
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
function largestRectangleArea(heights: number[]): number {
|
||||||
|
let resMax: number = 0;
|
||||||
|
for (let i = 0, length = heights.length; i < length; i++) {
|
||||||
|
// 左开右开
|
||||||
|
let left: number = i - 1,
|
||||||
|
right: number = i + 1;
|
||||||
|
while (left >= 0 && heights[left] >= heights[i]) {
|
||||||
|
left--;
|
||||||
|
}
|
||||||
|
while (right < length && heights[right] >= heights[i]) {
|
||||||
|
right++;
|
||||||
|
}
|
||||||
|
resMax = Math.max(resMax, heights[i] * (right - left - 1));
|
||||||
|
}
|
||||||
|
return resMax;
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
> 动态规划预处理:
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
function largestRectangleArea(heights: number[]): number {
|
||||||
|
const length: number = heights.length;
|
||||||
|
const leftHeightDp: number[] = [],
|
||||||
|
rightHeightDp: number[] = [];
|
||||||
|
leftHeightDp[0] = -1;
|
||||||
|
rightHeightDp[length - 1] = length;
|
||||||
|
for (let i = 1; i < length; i++) {
|
||||||
|
let j = i - 1;
|
||||||
|
while (j >= 0 && heights[i] <= heights[j]) {
|
||||||
|
j = leftHeightDp[j];
|
||||||
|
}
|
||||||
|
leftHeightDp[i] = j;
|
||||||
|
}
|
||||||
|
for (let i = length - 2; i >= 0; i--) {
|
||||||
|
let j = i + 1;
|
||||||
|
while (j < length && heights[i] <= heights[j]) {
|
||||||
|
j = rightHeightDp[j];
|
||||||
|
}
|
||||||
|
rightHeightDp[i] = j;
|
||||||
|
}
|
||||||
|
let resMax: number = 0;
|
||||||
|
for (let i = 0; i < length; i++) {
|
||||||
|
let area = heights[i] * (rightHeightDp[i] - leftHeightDp[i] - 1);
|
||||||
|
resMax = Math.max(resMax, area);
|
||||||
|
}
|
||||||
|
return resMax;
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
> 单调栈:
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
function largestRectangleArea(heights: number[]): number {
|
||||||
|
heights.push(0);
|
||||||
|
const length: number = heights.length;
|
||||||
|
// 栈底->栈顶:严格单调递增
|
||||||
|
const stack: number[] = [];
|
||||||
|
stack.push(0);
|
||||||
|
let resMax: number = 0;
|
||||||
|
for (let i = 1; i < length; i++) {
|
||||||
|
let top = stack[stack.length - 1];
|
||||||
|
if (heights[top] < heights[i]) {
|
||||||
|
stack.push(i);
|
||||||
|
} else if (heights[top] === heights[i]) {
|
||||||
|
stack.pop();
|
||||||
|
stack.push(i);
|
||||||
|
} else {
|
||||||
|
while (stack.length > 0 && heights[top] > heights[i]) {
|
||||||
|
let mid = stack.pop();
|
||||||
|
let left = stack.length > 0 ? stack[stack.length - 1] : -1;
|
||||||
|
let w = i - left - 1;
|
||||||
|
let h = heights[mid];
|
||||||
|
resMax = Math.max(resMax, w * h);
|
||||||
|
top = stack[stack.length - 1];
|
||||||
|
}
|
||||||
|
stack.push(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return resMax;
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-----------------------
|
-----------------------
|
||||||
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码一.jpg width=500> </img></div>
|
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码一.jpg width=500> </img></div>
|
||||||
|
@ -495,7 +495,7 @@ class solution:
|
|||||||
|
|
||||||
|
|
||||||
## go
|
## go
|
||||||
|
### 104.二叉树的最大深度
|
||||||
```go
|
```go
|
||||||
/**
|
/**
|
||||||
* definition for a binary tree node.
|
* definition for a binary tree node.
|
||||||
@ -548,6 +548,8 @@ func maxdepth(root *treenode) int {
|
|||||||
|
|
||||||
## javascript
|
## javascript
|
||||||
|
|
||||||
|
### 104.二叉树的最大深度
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
var maxdepth = function(root) {
|
var maxdepth = function(root) {
|
||||||
if (root === null) return 0;
|
if (root === null) return 0;
|
||||||
@ -595,6 +597,8 @@ var maxDepth = function(root) {
|
|||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### 559.n叉树的最大深度
|
||||||
|
|
||||||
N叉树的最大深度 递归写法
|
N叉树的最大深度 递归写法
|
||||||
```js
|
```js
|
||||||
var maxDepth = function(root) {
|
var maxDepth = function(root) {
|
||||||
@ -627,9 +631,9 @@ var maxDepth = function(root) {
|
|||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
## TypeScript:
|
## TypeScript
|
||||||
|
|
||||||
> 二叉树的最大深度:
|
### 104.二叉树的最大深度
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
// 后续遍历(自下而上)
|
// 后续遍历(自下而上)
|
||||||
@ -672,7 +676,7 @@ function maxDepth(root: TreeNode | null): number {
|
|||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
> N叉树的最大深度
|
### 559.n叉树的最大深度
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
// 后续遍历(自下而上)
|
// 后续遍历(自下而上)
|
||||||
@ -702,6 +706,8 @@ function maxDepth(root: TreeNode | null): number {
|
|||||||
|
|
||||||
## C
|
## C
|
||||||
|
|
||||||
|
### 104.二叉树的最大深度
|
||||||
|
|
||||||
二叉树最大深度递归
|
二叉树最大深度递归
|
||||||
```c
|
```c
|
||||||
int maxDepth(struct TreeNode* root){
|
int maxDepth(struct TreeNode* root){
|
||||||
@ -758,7 +764,8 @@ int maxDepth(struct TreeNode* root){
|
|||||||
|
|
||||||
## Swift
|
## Swift
|
||||||
|
|
||||||
>二叉树最大深度
|
### 104.二叉树的最大深度
|
||||||
|
|
||||||
```swift
|
```swift
|
||||||
// 递归 - 后序
|
// 递归 - 后序
|
||||||
func maxDepth1(_ root: TreeNode?) -> Int {
|
func maxDepth1(_ root: TreeNode?) -> Int {
|
||||||
@ -797,7 +804,8 @@ func maxDepth(_ root: TreeNode?) -> Int {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
>N叉树最大深度
|
### 559.n叉树的最大深度
|
||||||
|
|
||||||
```swift
|
```swift
|
||||||
// 递归
|
// 递归
|
||||||
func maxDepth(_ root: Node?) -> Int {
|
func maxDepth(_ root: Node?) -> Int {
|
||||||
@ -833,5 +841,84 @@ func maxDepth1(_ root: Node?) -> Int {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Scala
|
||||||
|
|
||||||
|
### 104.二叉树的最大深度
|
||||||
|
递归法:
|
||||||
|
```scala
|
||||||
|
object Solution {
|
||||||
|
def maxDepth(root: TreeNode): Int = {
|
||||||
|
def process(curNode: TreeNode): Int = {
|
||||||
|
if (curNode == null) return 0
|
||||||
|
// 递归左节点和右节点,返回最大的,最后+1
|
||||||
|
math.max(process(curNode.left), process(curNode.right)) + 1
|
||||||
|
}
|
||||||
|
// 调用递归方法,return关键字可以省略
|
||||||
|
process(root)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
迭代法:
|
||||||
|
```scala
|
||||||
|
object Solution {
|
||||||
|
import scala.collection.mutable
|
||||||
|
def maxDepth(root: TreeNode): Int = {
|
||||||
|
var depth = 0
|
||||||
|
if (root == null) return depth
|
||||||
|
val queue = mutable.Queue[TreeNode]()
|
||||||
|
queue.enqueue(root)
|
||||||
|
while (!queue.isEmpty) {
|
||||||
|
val len = queue.size
|
||||||
|
for (i <- 0 until len) {
|
||||||
|
val curNode = queue.dequeue()
|
||||||
|
if (curNode.left != null) queue.enqueue(curNode.left)
|
||||||
|
if (curNode.right != null) queue.enqueue(curNode.right)
|
||||||
|
}
|
||||||
|
depth += 1 // 只要有层次就+=1
|
||||||
|
}
|
||||||
|
depth
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 559.n叉树的最大深度
|
||||||
|
|
||||||
|
递归法:
|
||||||
|
```scala
|
||||||
|
object Solution {
|
||||||
|
def maxDepth(root: Node): Int = {
|
||||||
|
if (root == null) return 0
|
||||||
|
var depth = 0
|
||||||
|
for (node <- root.children) {
|
||||||
|
depth = math.max(depth, maxDepth(node))
|
||||||
|
}
|
||||||
|
depth + 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
迭代法: (层序遍历)
|
||||||
|
```scala
|
||||||
|
object Solution {
|
||||||
|
import scala.collection.mutable
|
||||||
|
def maxDepth(root: Node): Int = {
|
||||||
|
if (root == null) return 0
|
||||||
|
var depth = 0
|
||||||
|
val queue = mutable.Queue[Node]()
|
||||||
|
queue.enqueue(root)
|
||||||
|
while (!queue.isEmpty) {
|
||||||
|
val len = queue.size
|
||||||
|
depth += 1
|
||||||
|
for (i <- 0 until len) {
|
||||||
|
val curNode = queue.dequeue()
|
||||||
|
for (node <- curNode.children) queue.enqueue(node)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
depth
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
-----------------------
|
-----------------------
|
||||||
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码一.jpg width=500> </img></div>
|
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码一.jpg width=500> </img></div>
|
||||||
|
@ -488,6 +488,46 @@ func minDepth(_ root: TreeNode?) -> Int {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## Scala
|
||||||
|
|
||||||
|
递归法:
|
||||||
|
```scala
|
||||||
|
object Solution {
|
||||||
|
def minDepth(root: TreeNode): Int = {
|
||||||
|
if (root == null) return 0
|
||||||
|
if (root.left == null && root.right != null) return 1 + minDepth(root.right)
|
||||||
|
if (root.left != null && root.right == null) return 1 + minDepth(root.left)
|
||||||
|
// 如果两侧都不为空,则取最小值,return关键字可以省略
|
||||||
|
1 + math.min(minDepth(root.left), minDepth(root.right))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
迭代法:
|
||||||
|
```scala
|
||||||
|
object Solution {
|
||||||
|
import scala.collection.mutable
|
||||||
|
def minDepth(root: TreeNode): Int = {
|
||||||
|
if (root == null) return 0
|
||||||
|
var depth = 0
|
||||||
|
val queue = mutable.Queue[TreeNode]()
|
||||||
|
queue.enqueue(root)
|
||||||
|
while (!queue.isEmpty) {
|
||||||
|
depth += 1
|
||||||
|
val len = queue.size
|
||||||
|
for (i <- 0 until len) {
|
||||||
|
val curNode = queue.dequeue()
|
||||||
|
if (curNode.left != null) queue.enqueue(curNode.left)
|
||||||
|
if (curNode.right != null) queue.enqueue(curNode.right)
|
||||||
|
if (curNode.left == null && curNode.right == null) return depth
|
||||||
|
}
|
||||||
|
}
|
||||||
|
depth
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
rust:
|
rust:
|
||||||
```rust
|
```rust
|
||||||
impl Solution {
|
impl Solution {
|
||||||
@ -550,6 +590,7 @@ impl Solution {
|
|||||||
}
|
}
|
||||||
min_depth
|
min_depth
|
||||||
}
|
}
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
-----------------------
|
-----------------------
|
||||||
|
@ -332,5 +332,36 @@ var nextGreaterElement = function (nums1, nums2) {
|
|||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
|
TypeScript:
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
function nextGreaterElement(nums1: number[], nums2: number[]): number[] {
|
||||||
|
const resArr: number[] = new Array(nums1.length).fill(-1);
|
||||||
|
const stack: number[] = [];
|
||||||
|
const helperMap: Map<number, number> = new Map();
|
||||||
|
nums1.forEach((num, index) => {
|
||||||
|
helperMap.set(num, index);
|
||||||
|
})
|
||||||
|
stack.push(0);
|
||||||
|
for (let i = 1, length = nums2.length; i < length; i++) {
|
||||||
|
let top = stack[stack.length - 1];
|
||||||
|
while (stack.length > 0 && nums2[top] < nums2[i]) {
|
||||||
|
let index = helperMap.get(nums2[top]);
|
||||||
|
if (index !== undefined) {
|
||||||
|
resArr[index] = nums2[i];
|
||||||
|
}
|
||||||
|
stack.pop();
|
||||||
|
top = stack[stack.length - 1];
|
||||||
|
}
|
||||||
|
if (helperMap.get(nums2[i]) !== undefined) {
|
||||||
|
stack.push(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return resArr;
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-----------------------
|
-----------------------
|
||||||
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码一.jpg width=500> </img></div>
|
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码一.jpg width=500> </img></div>
|
||||||
|
@ -182,5 +182,31 @@ var nextGreaterElements = function (nums) {
|
|||||||
return res;
|
return res;
|
||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
TypeScript:
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
function nextGreaterElements(nums: number[]): number[] {
|
||||||
|
const length: number = nums.length;
|
||||||
|
const stack: number[] = [];
|
||||||
|
stack.push(0);
|
||||||
|
const resArr: number[] = new Array(length).fill(-1);
|
||||||
|
for (let i = 1; i < length * 2; i++) {
|
||||||
|
const index = i % length;
|
||||||
|
let top = stack[stack.length - 1];
|
||||||
|
while (stack.length > 0 && nums[top] < nums[index]) {
|
||||||
|
resArr[top] = nums[index];
|
||||||
|
stack.pop();
|
||||||
|
top = stack[stack.length - 1];
|
||||||
|
}
|
||||||
|
if (i < length) {
|
||||||
|
stack.push(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return resArr;
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-----------------------
|
-----------------------
|
||||||
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码一.jpg width=500> </img></div>
|
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码一.jpg width=500> </img></div>
|
||||||
|
@ -235,6 +235,35 @@ const longestPalindromeSubseq = (s) => {
|
|||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
|
TypeScript:
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
function longestPalindromeSubseq(s: string): number {
|
||||||
|
/**
|
||||||
|
dp[i][j]:[i,j]区间内,最长回文子序列的长度
|
||||||
|
*/
|
||||||
|
const length: number = s.length;
|
||||||
|
const dp: number[][] = new Array(length).fill(0)
|
||||||
|
.map(_ => new Array(length).fill(0));
|
||||||
|
for (let i = 0; i < length; i++) {
|
||||||
|
dp[i][i] = 1;
|
||||||
|
}
|
||||||
|
// 自下而上,自左往右遍历
|
||||||
|
for (let i = length - 1; i >= 0; i--) {
|
||||||
|
for (let j = i + 1; j < length; j++) {
|
||||||
|
if (s[i] === s[j]) {
|
||||||
|
dp[i][j] = dp[i + 1][j - 1] + 2;
|
||||||
|
} else {
|
||||||
|
dp[i][j] = Math.max(dp[i][j - 1], dp[i + 1][j]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return dp[0][length - 1];
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-----------------------
|
-----------------------
|
||||||
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码一.jpg width=500> </img></div>
|
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码一.jpg width=500> </img></div>
|
||||||
|
@ -372,6 +372,32 @@ var dailyTemperatures = function(temperatures) {
|
|||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
|
TypeScript:
|
||||||
|
|
||||||
|
> 精简版:
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
function dailyTemperatures(temperatures: number[]): number[] {
|
||||||
|
const length: number = temperatures.length;
|
||||||
|
const stack: number[] = [];
|
||||||
|
const resArr: number[] = new Array(length).fill(0);
|
||||||
|
stack.push(0);
|
||||||
|
for (let i = 1; i < length; i++) {
|
||||||
|
let top = stack[stack.length - 1];
|
||||||
|
while (
|
||||||
|
stack.length > 0 &&
|
||||||
|
temperatures[top] < temperatures[i]
|
||||||
|
) {
|
||||||
|
resArr[top] = i - top;
|
||||||
|
stack.pop();
|
||||||
|
top = stack[stack.length - 1];
|
||||||
|
}
|
||||||
|
stack.push(i);
|
||||||
|
}
|
||||||
|
return resArr;
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user