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 01ccda9

Browse files
add: Search for a Range
1 parent 4ad4079 commit 01ccda9

File tree

2 files changed

+69
-0
lines changed

2 files changed

+69
-0
lines changed

‎README.md‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ Progress: 20/
1313
|19|[Remove Nth Node From End of List](https://leetcode.com/problems/remove-nth-node-from-end-of-list/) | [JavaScript](./src/remove-nth-node-from-end-of-list/res.js)|Medium|
1414
|22|[Generate Parentheses](https://leetcode.com/problems/generate-parentheses/) | [JavaScript](./src/generate-parentheses/res.js)|Medium|
1515
|26|[Remove Duplicates from Sorted Array](https://leetcode.com/problems/remove-duplicates-from-sorted-array/) | [JavaScript](./src/remove-duplicates-from-sorted-array/res.js)|Easy|
16+
|34|[Search for a Range](https://leetcode.com/problems/search-for-a-range/) | [JavaScript](./src/search-for-a-range/res.js)|Medium|
1617
|48|[Rotate Image](https://leetcode.com/problems/rotate-image/) | [JavaScript](./src/rotate-image/res.js)|Medium|
1718
|66|[Plus One](https://leetcode.com/problems/plus-one/) | [JavaScript](./src/plus-one/res.js)|Easy|
1819
|69|[Sqrt(x)](https://leetcode.com/problems/sqrtx/) | [JavaScript](./src/sqrtx/res.js)|Easy|

‎src/search-for-a-range/res.js‎

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
// Given an array of integers sorted in ascending order, find the starting and ending position of a given target value.
2+
3+
// Your algorithm's runtime complexity must be in the order of O(log n).
4+
5+
// If the target is not found in the array, return [-1, -1].
6+
7+
// For example,
8+
// Given [5, 7, 7, 8, 8, 10] and target value 8,
9+
// return [3, 4].
10+
11+
/**
12+
* res.js
13+
* @authors Joe Jiang (hijiangtao@gmail.com)
14+
* @date 2017年02月26日 22:56:22
15+
* @version $Id$
16+
*
17+
* @param {number[]} nums
18+
* @param {number} target
19+
* @return {number[]}
20+
*/
21+
let searchRange = function(nums, target) {
22+
let arrlen = nums.length;
23+
if (!arrlen) {
24+
return [-1, -1];
25+
}
26+
27+
let leftIndex = binarySearch(nums, 0, arrlen-1, target, 'l'), rightIndex;
28+
if (leftIndex === -1) {
29+
return [-1, -1];
30+
} else {
31+
rightIndex = binarySearch(nums, leftIndex, arrlen-1, target, 'r');
32+
}
33+
34+
return [leftIndex, rightIndex];
35+
};
36+
37+
let binarySearch = function(nums, begin, end, target, type) {
38+
let arrlen = nums.length;
39+
while (begin <= end) {
40+
let mid = begin + Number.parseInt( (end-begin)/2 ),
41+
midVal = nums[mid];
42+
43+
if (midVal === target) {
44+
switch (type) {
45+
case 'l':
46+
if (mid === 0 || nums[mid-1] !== target) {
47+
return mid;
48+
} else {
49+
end = mid-1;
50+
}
51+
break;
52+
default:
53+
if (mid === arrlen-1 || nums[mid+1] !== target) {
54+
return mid;
55+
} else {
56+
begin = mid+1;
57+
}
58+
break;
59+
}
60+
} else if (midVal > target) {
61+
end = mid-1;
62+
} else if (midVal < target) {
63+
begin = mid+1;
64+
}
65+
}
66+
67+
return -1;
68+
};

0 commit comments

Comments
(0)

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