Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 9721189

Browse files
添加(0042.接雨水.md):增加typescript版本
1 parent e07a3ca commit 9721189

File tree

1 file changed

+85
-0
lines changed

1 file changed

+85
-0
lines changed

‎problems/0042.接雨水.md

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -744,6 +744,91 @@ var trap = function(height) {
744744
};
745745
```
746746

747+
### TypeScript
748+
749+
双指针法:
750+
751+
```typescript
752+
function trap(height: number[]): number {
753+
const length: number = height.length;
754+
let resVal: number = 0;
755+
for (let i = 0; i < length; i++) {
756+
let leftMaxHeight: number = height[i],
757+
rightMaxHeight: number = height[i];
758+
let leftIndex: number = i - 1,
759+
rightIndex: number = i + 1;
760+
while (leftIndex >= 0) {
761+
if (height[leftIndex] > leftMaxHeight)
762+
leftMaxHeight = height[leftIndex];
763+
leftIndex--;
764+
}
765+
while (rightIndex < length) {
766+
if (height[rightIndex] > rightMaxHeight)
767+
rightMaxHeight = height[rightIndex];
768+
rightIndex++;
769+
}
770+
resVal += Math.min(leftMaxHeight, rightMaxHeight) - height[i];
771+
}
772+
return resVal;
773+
};
774+
```
775+
776+
动态规划:
777+
778+
```typescript
779+
function trap(height: number[]): number {
780+
const length: number = height.length;
781+
const leftMaxHeightDp: number[] = [],
782+
rightMaxHeightDp: number[] = [];
783+
leftMaxHeightDp[0] = height[0];
784+
rightMaxHeightDp[length - 1] = height[length - 1];
785+
for (let i = 1; i < length; i++) {
786+
leftMaxHeightDp[i] = Math.max(height[i], leftMaxHeightDp[i - 1]);
787+
}
788+
for (let i = length - 2; i >= 0; i--) {
789+
rightMaxHeightDp[i] = Math.max(height[i], rightMaxHeightDp[i + 1]);
790+
}
791+
let resVal: number = 0;
792+
for (let i = 0; i < length; i++) {
793+
resVal += Math.min(leftMaxHeightDp[i], rightMaxHeightDp[i]) - height[i];
794+
}
795+
return resVal;
796+
};
797+
```
798+
799+
单调栈:
800+
801+
```typescript
802+
function trap(height: number[]): number {
803+
const length: number = height.length;
804+
const stack: number[] = [];
805+
stack.push(0);
806+
let resVal: number = 0;
807+
for (let i = 1; i < length; i++) {
808+
let top = stack[stack.length - 1];
809+
if (height[top] > height[i]) {
810+
stack.push(i);
811+
} else if (height[top] === height[i]) {
812+
stack.pop();
813+
stack.push(i);
814+
} else {
815+
while (stack.length > 0 && height[top] < height[i]) {
816+
let mid = stack.pop();
817+
if (stack.length > 0) {
818+
let left = stack[stack.length - 1];
819+
let h = Math.min(height[left], height[i]) - height[mid];
820+
let w = i - left - 1;
821+
resVal += h * w;
822+
top = stack[stack.length - 1];
823+
}
824+
}
825+
stack.push(i);
826+
}
827+
}
828+
return resVal;
829+
};
830+
```
831+
747832
### C:
748833

749834
一种更简便的双指针方法:

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /