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 cc72b16

Browse files
添加(0034.在排序数组中查找元素的第一个和最后一个位置.md):增加typescript版本
1 parent f6456c3 commit cc72b16

File tree

1 file changed

+55
-0
lines changed

1 file changed

+55
-0
lines changed

‎problems/0034.在排序数组中查找元素的第一个和最后一个位置.md

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -481,6 +481,61 @@ var searchRange = function(nums, target) {
481481
};
482482
```
483483

484+
### TypeScript
485+
486+
```typescript
487+
function searchRange(nums: number[], target: number): number[] {
488+
const leftBoard: number = getLeftBorder(nums, target);
489+
const rightBoard: number = getRightBorder(nums, target);
490+
// target 在nums区间左侧或右侧
491+
if (leftBoard === (nums.length - 1) || rightBoard === 0) return [-1, -1];
492+
// target 不存在与nums范围内
493+
if (rightBoard - leftBoard <= 1) return [-1, -1];
494+
// target 存在于nums范围内
495+
return [leftBoard + 1, rightBoard - 1];
496+
};
497+
// 查找第一个大于target的元素下标
498+
function getRightBorder(nums: number[], target: number): number {
499+
let left: number = 0,
500+
right: number = nums.length - 1;
501+
// 0表示target在nums区间的左边
502+
let rightBoard: number = 0;
503+
while (left <= right) {
504+
let mid = Math.floor((left + right) / 2);
505+
if (nums[mid] <= target) {
506+
// 右边界一定在mid右边(不含mid)
507+
left = mid + 1;
508+
rightBoard = left;
509+
} else {
510+
// 右边界在mid左边(含mid)
511+
right = mid - 1;
512+
}
513+
}
514+
return rightBoard;
515+
}
516+
// 查找第一个小于target的元素下标
517+
function getLeftBorder(nums: number[], target: number): number {
518+
let left: number = 0,
519+
right: number = nums.length - 1;
520+
// length-1表示target在nums区间的右边
521+
let leftBoard: number = nums.length - 1;
522+
while (left <= right) {
523+
let mid = Math.floor((left + right) / 2);
524+
if (nums[mid] >= target) {
525+
// 左边界一定在mid左边(不含mid)
526+
right = mid - 1;
527+
leftBoard = right;
528+
} else {
529+
// 左边界在mid右边(含mid)
530+
left = mid + 1;
531+
}
532+
}
533+
return leftBoard;
534+
}
535+
```
536+
537+
538+
484539

485540
-----------------------
486541
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码一.jpg width=500> </img></div>

0 commit comments

Comments
(0)

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