Skip to content

Commit 669a7d2

Browse files
committed
feat: leetcode 908
1 parent b894cb2 commit 669a7d2

File tree

8 files changed

+106
-1
lines changed

8 files changed

+106
-1
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
<p align="center">
44
<!-- TOPICS COUNT START -->
5-
<img src="https://img.shields.io/badge/-进度:347-green" alt="进度:347">
5+
<img src="https://img.shields.io/badge/-进度:348-green" alt="进度:348">
66
<!-- TOPICS COUNT END -->
77
<a href="./assets/docs/TOPICS.md"><img src="https://img.shields.io/badge/-题库目录-blue" alt="题库目录"></a>
88
<a href="./assets/docs/CATEGORIES.md"><img src="https://img.shields.io/badge/-题库分类-red" alt="题库分类"></a>

assets/data/categories.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -945,6 +945,12 @@
945945
"path": "./problemset/projection-area-of-3d-shapes/README.md",
946946
"difficulty": "简单"
947947
},
948+
{
949+
"id": "908",
950+
"title": "最小差值",
951+
"path": "./problemset/smallest-range/README.md",
952+
"difficulty": "简单"
953+
},
948954
{
949955
"id": "1447",
950956
"title": "最简分数",

assets/data/topics.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3099,6 +3099,16 @@
30993099
"url": "https://leetcode-cn.com/problems/sort-array-by-parity/",
31003100
"path": "./problemset/sort-array-by-parity/README.md"
31013101
},
3102+
{
3103+
"id": "908",
3104+
"title": {
3105+
"cn": "最小差值",
3106+
"en": "smallest-range"
3107+
},
3108+
"difficulty": "简单",
3109+
"url": "https://leetcode-cn.com/problems/smallest-range-i/",
3110+
"path": "./problemset/smallest-range/README.md"
3111+
},
31023112
{
31033113
"id": "917",
31043114
"title": {

assets/docs/CATEGORIES.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,7 @@
182182
| 553. [最优除法](../../problemset/optimal-division/README.md) | 中等 |
183183
| 762. [二进制表示中质数个计算置位](../../problemset/prime-number-of-set-bits-in-binary-representation/README.md) | 简单 |
184184
| 883. [三维形体投影面积](../../problemset/projection-area-of-3d-shapes/README.md) | 简单 |
185+
| 908. [最小差值](../../problemset/smallest-range/README.md) | 简单 |
185186
| 1447. [最简分数](../../problemset/simplified-fractions/README.md) | 中等 |
186187
| 1791. [找出星型图的中心节点](../../problemset/find-center-of-star-graph/README.md) | 简单 |
187188

assets/docs/TOPICS.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -620,6 +620,8 @@
620620

621621
[905. 按奇偶排序数组](../../problemset/sort-array-by-parity/README.md)
622622

623+
[908. 最小差值](../../problemset/smallest-range/README.md)
624+
623625
[917. 仅仅反转字母](../../problemset/reverse-only-letters/README.md)
624626

625627
[954. 二倍数对数组](../../problemset/array-of-doubled-pairs/README.md)

problemset/smallest-range/README.md

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
# 最小差值
2+
3+
> 难度:简单
4+
>
5+
> https://leetcode-cn.com/problems/smallest-range-i/
6+
7+
## 题目
8+
9+
给你一个整数数组 `nums`,和一个整数 `k`
10+
11+
在一个操作中,您可以选择 `0 <= i < nums.length` 的任何索引 `i` 。将 `nums[i]` 改为 `nums[i] + x` ,其中 `x` 是一个范围为 `[-k, k]` 的整数。对于每个索引 `i` ,最多 **只能** 应用 **一次** 此操作。
12+
13+
`nums` 的 **分数** 是 `nums` 中最大和最小元素的差值。 
14+
15+
在对  `nums` 中的每个索引最多应用一次上述操作后,返回 `nums` 的最低 **分数 **
16+
17+
 
18+
### 示例
19+
20+
#### 示例 1:
21+
22+
```
23+
输入:nums = [1], k = 0
24+
输出:0
25+
解释:分数是 max(nums) - min(nums) = 1 - 1 = 0。
26+
```
27+
28+
#### 示例 2:
29+
30+
```
31+
输入:nums = [0,10], k = 2
32+
输出:6
33+
解释:将 nums 改为 [2,8]。分数是 max(nums) - min(nums) = 8 - 2 = 6。
34+
```
35+
36+
#### 示例 3:
37+
38+
```
39+
输入:nums = [1,3,6], k = 3
40+
输出:0
41+
解释:将 nums 改为 [4,4,4]。分数是 max(nums) - min(nums) = 4 - 4 = 0。
42+
```
43+
44+
## 解题
45+
46+
```ts
47+
/**
48+
* 数学
49+
* @desc 时间复杂度 O(N) 空间复杂度 O(1)
50+
* @param nums
51+
* @param k
52+
* @returns
53+
*/
54+
export function smallestRangeI(nums: number[], k: number): number {
55+
const min = Math.min(...nums)
56+
const max = Math.max(...nums)
57+
return max - min <= 2 * k ? 0 : max - min - 2 * k
58+
}
59+
```
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { describe, expect, it } from 'vitest'
2+
import { smallestRangeI } from '.'
3+
4+
describe('最小差值', () => {
5+
testCase(smallestRangeI)
6+
})
7+
8+
function testCase(fn: (nums: number[], k: number) => number) {
9+
it.each([
10+
[[1], 0, 0],
11+
[[0, 10], 2, 6],
12+
])('示例%#', (nums, k, expected) => {
13+
expect(fn(nums, k)).toBe(expected)
14+
})
15+
}

problemset/smallest-range/index.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
/**
2+
* 数学
3+
* @desc 时间复杂度 O(N) 空间复杂度 O(1)
4+
* @param nums
5+
* @param k
6+
* @returns
7+
*/
8+
export function smallestRangeI(nums: number[], k: number): number {
9+
const min = Math.min(...nums)
10+
const max = Math.max(...nums)
11+
return max - min <= 2 * k ? 0 : max - min - 2 * k
12+
}

0 commit comments

Comments
 (0)