Skip to content

Commit c20050b

Browse files
committed
feat: add solutions to lc problem: No.1200
No.1200.Minimum Absolute Difference
1 parent 12ee022 commit c20050b

File tree

7 files changed

+144
-124
lines changed

7 files changed

+144
-124
lines changed

solution/1200-1299/1200.Minimum Absolute Difference/README.md

+53-42
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,11 @@
5656

5757
**方法一:排序**
5858

59-
时间复杂度 $O(nlogn)$,其中 $n$ 表示 $arr$ 的长度。
59+
根据题目描述,我们需要找出数组 $arr$ 中任意两个元素的最小绝对差,因此我们可以先对数组 $arr$ 排序,随后遍历相邻元素,得到最小绝对差 $mi$。
60+
61+
最后我们再遍历相邻元素,找出所有最小绝对差等于 $mi$ 的元素对。
62+
63+
时间复杂度 $O(n \times \log n)$,空间复杂度 $O(\log n)$。其中 $n$ 是数组 $arr$ 的长度。
6064

6165
<!-- tabs:start -->
6266

@@ -68,16 +72,8 @@
6872
class Solution:
6973
def minimumAbsDifference(self, arr: List[int]) -> List[List[int]]:
7074
arr.sort()
71-
ans = []
72-
mi = inf
73-
for a, b in pairwise(arr):
74-
d = b - a
75-
if d < mi:
76-
ans = [(a, b)]
77-
mi = d
78-
elif d == mi:
79-
ans.append((a, b))
80-
return ans
75+
mi = min(b - a for a, b in pairwise(arr))
76+
return [[a, b] for a, b in pairwise(arr) if b - a == mi]
8177
```
8278

8379
### **Java**
@@ -88,18 +84,15 @@ class Solution:
8884
class Solution {
8985
public List<List<Integer>> minimumAbsDifference(int[] arr) {
9086
Arrays.sort(arr);
91-
List<List<Integer>> ans = new ArrayList<>();
9287
int n = arr.length;
93-
int mi = Integer.MAX_VALUE;
88+
int mi = 1 << 30;
9489
for (int i = 0; i < n - 1; ++i) {
95-
int a = arr[i], b = arr[i + 1];
96-
int d = b - a;
97-
if (d < mi) {
98-
ans.clear();
99-
ans.add(Arrays.asList(a, b));
100-
mi = d;
101-
} else if (d == mi) {
102-
ans.add(Arrays.asList(a, b));
90+
mi = Math.min(mi, arr[i + 1] - arr[i]);
91+
}
92+
List<List<Integer>> ans = new ArrayList<>();
93+
for (int i = 0; i < n - 1; ++i) {
94+
if (arr[i + 1] - arr[i] == mi) {
95+
ans.add(List.of(arr[i], arr[i + 1]));
10396
}
10497
}
10598
return ans;
@@ -114,18 +107,16 @@ class Solution {
114107
public:
115108
vector<vector<int>> minimumAbsDifference(vector<int>& arr) {
116109
sort(arr.begin(), arr.end());
117-
int mi = INT_MAX;
110+
int mi = 1 << 30;
118111
int n = arr.size();
112+
for (int i = 0; i < n - 1; ++i) {
113+
mi = min(mi, arr[i + 1] - arr[i]);
114+
}
119115
vector<vector<int>> ans;
120116
for (int i = 0; i < n - 1; ++i) {
121-
int a = arr[i], b = arr[i + 1];
122-
int d = b - a;
123-
if (d < mi) {
124-
mi = d;
125-
ans.clear();
126-
ans.push_back({a, b});
127-
} else if (d == mi)
128-
ans.push_back({a, b});
117+
if (arr[i + 1] - arr[i] == mi) {
118+
ans.push_back({arr[i], arr[i + 1]});
119+
}
129120
}
130121
return ans;
131122
}
@@ -135,21 +126,41 @@ public:
135126
### **Go**
136127
137128
```go
138-
func minimumAbsDifference(arr []int) [][]int {
129+
func minimumAbsDifference(arr []int) (ans [][]int) {
139130
sort.Ints(arr)
140-
mi := math.MaxInt32
141-
var ans [][]int
142-
for i, a := range arr[:len(arr)-1] {
143-
b := arr[i+1]
144-
d := b - a
145-
if d < mi {
146-
mi = d
147-
ans = [][]int{[]int{a, b}}
148-
} else if d == mi {
149-
ans = append(ans, []int{a, b})
131+
mi := 1 << 30
132+
n := len(arr)
133+
for i := 0; i < n-1; i++ {
134+
if t := arr[i+1] - arr[i]; t < mi {
135+
mi = t
150136
}
151137
}
152-
return ans
138+
for i := 0; i < n-1; i++ {
139+
if arr[i+1]-arr[i] == mi {
140+
ans = append(ans, []int{arr[i], arr[i+1]})
141+
}
142+
}
143+
return
144+
}
145+
```
146+
147+
### **TypeScript**
148+
149+
```ts
150+
function minimumAbsDifference(arr: number[]): number[][] {
151+
arr.sort((a, b) => a - b);
152+
let mi = 1 << 30;
153+
const n = arr.length;
154+
for (let i = 0; i < n - 1; ++i) {
155+
mi = Math.min(mi, arr[i + 1] - arr[i]);
156+
}
157+
const ans: number[][] = [];
158+
for (let i = 0; i < n - 1; ++i) {
159+
if (arr[i + 1] - arr[i] === mi) {
160+
ans.push([arr[i], arr[i + 1]]);
161+
}
162+
}
163+
return ans;
153164
}
154165
```
155166

solution/1200-1299/1200.Minimum Absolute Difference/README_EN.md

+48-41
Original file line numberDiff line numberDiff line change
@@ -54,16 +54,8 @@
5454
class Solution:
5555
def minimumAbsDifference(self, arr: List[int]) -> List[List[int]]:
5656
arr.sort()
57-
ans = []
58-
mi = inf
59-
for a, b in pairwise(arr):
60-
d = b - a
61-
if d < mi:
62-
ans = [(a, b)]
63-
mi = d
64-
elif d == mi:
65-
ans.append((a, b))
66-
return ans
57+
mi = min(b - a for a, b in pairwise(arr))
58+
return [[a, b] for a, b in pairwise(arr) if b - a == mi]
6759
```
6860

6961
### **Java**
@@ -72,18 +64,15 @@ class Solution:
7264
class Solution {
7365
public List<List<Integer>> minimumAbsDifference(int[] arr) {
7466
Arrays.sort(arr);
75-
List<List<Integer>> ans = new ArrayList<>();
7667
int n = arr.length;
77-
int mi = Integer.MAX_VALUE;
68+
int mi = 1 << 30;
69+
for (int i = 0; i < n - 1; ++i) {
70+
mi = Math.min(mi, arr[i + 1] - arr[i]);
71+
}
72+
List<List<Integer>> ans = new ArrayList<>();
7873
for (int i = 0; i < n - 1; ++i) {
79-
int a = arr[i], b = arr[i + 1];
80-
int d = b - a;
81-
if (d < mi) {
82-
ans.clear();
83-
ans.add(Arrays.asList(a, b));
84-
mi = d;
85-
} else if (d == mi) {
86-
ans.add(Arrays.asList(a, b));
74+
if (arr[i + 1] - arr[i] == mi) {
75+
ans.add(List.of(arr[i], arr[i + 1]));
8776
}
8877
}
8978
return ans;
@@ -98,18 +87,16 @@ class Solution {
9887
public:
9988
vector<vector<int>> minimumAbsDifference(vector<int>& arr) {
10089
sort(arr.begin(), arr.end());
101-
int mi = INT_MAX;
90+
int mi = 1 << 30;
10291
int n = arr.size();
92+
for (int i = 0; i < n - 1; ++i) {
93+
mi = min(mi, arr[i + 1] - arr[i]);
94+
}
10395
vector<vector<int>> ans;
10496
for (int i = 0; i < n - 1; ++i) {
105-
int a = arr[i], b = arr[i + 1];
106-
int d = b - a;
107-
if (d < mi) {
108-
mi = d;
109-
ans.clear();
110-
ans.push_back({a, b});
111-
} else if (d == mi)
112-
ans.push_back({a, b});
97+
if (arr[i + 1] - arr[i] == mi) {
98+
ans.push_back({arr[i], arr[i + 1]});
99+
}
113100
}
114101
return ans;
115102
}
@@ -119,21 +106,41 @@ public:
119106
### **Go**
120107
121108
```go
122-
func minimumAbsDifference(arr []int) [][]int {
109+
func minimumAbsDifference(arr []int) (ans [][]int) {
123110
sort.Ints(arr)
124-
mi := math.MaxInt32
125-
var ans [][]int
126-
for i, a := range arr[:len(arr)-1] {
127-
b := arr[i+1]
128-
d := b - a
129-
if d < mi {
130-
mi = d
131-
ans = [][]int{[]int{a, b}}
132-
} else if d == mi {
133-
ans = append(ans, []int{a, b})
111+
mi := 1 << 30
112+
n := len(arr)
113+
for i := 0; i < n-1; i++ {
114+
if t := arr[i+1] - arr[i]; t < mi {
115+
mi = t
116+
}
117+
}
118+
for i := 0; i < n-1; i++ {
119+
if arr[i+1]-arr[i] == mi {
120+
ans = append(ans, []int{arr[i], arr[i+1]})
134121
}
135122
}
136-
return ans
123+
return
124+
}
125+
```
126+
127+
### **TypeScript**
128+
129+
```ts
130+
function minimumAbsDifference(arr: number[]): number[][] {
131+
arr.sort((a, b) => a - b);
132+
let mi = 1 << 30;
133+
const n = arr.length;
134+
for (let i = 0; i < n - 1; ++i) {
135+
mi = Math.min(mi, arr[i + 1] - arr[i]);
136+
}
137+
const ans: number[][] = [];
138+
for (let i = 0; i < n - 1; ++i) {
139+
if (arr[i + 1] - arr[i] === mi) {
140+
ans.push([arr[i], arr[i + 1]]);
141+
}
142+
}
143+
return ans;
137144
}
138145
```
139146

solution/1200-1299/1200.Minimum Absolute Difference/Solution.cpp

+7-9
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,16 @@ class Solution {
22
public:
33
vector<vector<int>> minimumAbsDifference(vector<int>& arr) {
44
sort(arr.begin(), arr.end());
5-
int mi = INT_MAX;
5+
int mi = 1 << 30;
66
int n = arr.size();
7+
for (int i = 0; i < n - 1; ++i) {
8+
mi = min(mi, arr[i + 1] - arr[i]);
9+
}
710
vector<vector<int>> ans;
811
for (int i = 0; i < n - 1; ++i) {
9-
int a = arr[i], b = arr[i + 1];
10-
int d = b - a;
11-
if (d < mi) {
12-
mi = d;
13-
ans.clear();
14-
ans.push_back({a, b});
15-
} else if (d == mi)
16-
ans.push_back({a, b});
12+
if (arr[i + 1] - arr[i] == mi) {
13+
ans.push_back({arr[i], arr[i + 1]});
14+
}
1715
}
1816
return ans;
1917
}
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
1-
func minimumAbsDifference(arr []int) [][]int {
1+
func minimumAbsDifference(arr []int) (ans [][]int) {
22
sort.Ints(arr)
3-
mi := math.MaxInt32
4-
var ans [][]int
5-
for i, a := range arr[:len(arr)-1] {
6-
b := arr[i+1]
7-
d := b - a
8-
if d < mi {
9-
mi = d
10-
ans = [][]int{[]int{a, b}}
11-
} else if d == mi {
12-
ans = append(ans, []int{a, b})
3+
mi := 1 << 30
4+
n := len(arr)
5+
for i := 0; i < n-1; i++ {
6+
if t := arr[i+1] - arr[i]; t < mi {
7+
mi = t
138
}
149
}
15-
return ans
10+
for i := 0; i < n-1; i++ {
11+
if arr[i+1]-arr[i] == mi {
12+
ans = append(ans, []int{arr[i], arr[i+1]})
13+
}
14+
}
15+
return
1616
}

solution/1200-1299/1200.Minimum Absolute Difference/Solution.java

+7-10
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,15 @@
11
class Solution {
22
public List<List<Integer>> minimumAbsDifference(int[] arr) {
33
Arrays.sort(arr);
4-
List<List<Integer>> ans = new ArrayList<>();
54
int n = arr.length;
6-
int mi = Integer.MAX_VALUE;
5+
int mi = 1 << 30;
6+
for (int i = 0; i < n - 1; ++i) {
7+
mi = Math.min(mi, arr[i + 1] - arr[i]);
8+
}
9+
List<List<Integer>> ans = new ArrayList<>();
710
for (int i = 0; i < n - 1; ++i) {
8-
int a = arr[i], b = arr[i + 1];
9-
int d = b - a;
10-
if (d < mi) {
11-
ans.clear();
12-
ans.add(Arrays.asList(a, b));
13-
mi = d;
14-
} else if (d == mi) {
15-
ans.add(Arrays.asList(a, b));
11+
if (arr[i + 1] - arr[i] == mi) {
12+
ans.add(List.of(arr[i], arr[i + 1]));
1613
}
1714
}
1815
return ans;
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,5 @@
11
class Solution:
22
def minimumAbsDifference(self, arr: List[int]) -> List[List[int]]:
33
arr.sort()
4-
ans = []
5-
mi = inf
6-
for a, b in pairwise(arr):
7-
d = b - a
8-
if d < mi:
9-
ans = [(a, b)]
10-
mi = d
11-
elif d == mi:
12-
ans.append((a, b))
13-
return ans
4+
mi = min(b - a for a, b in pairwise(arr))
5+
return [[a, b] for a, b in pairwise(arr) if b - a == mi]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
function minimumAbsDifference(arr: number[]): number[][] {
2+
arr.sort((a, b) => a - b);
3+
let mi = 1 << 30;
4+
const n = arr.length;
5+
for (let i = 0; i < n - 1; ++i) {
6+
mi = Math.min(mi, arr[i + 1] - arr[i]);
7+
}
8+
const ans: number[][] = [];
9+
for (let i = 0; i < n - 1; ++i) {
10+
if (arr[i + 1] - arr[i] === mi) {
11+
ans.push([arr[i], arr[i + 1]]);
12+
}
13+
}
14+
return ans;
15+
}

0 commit comments

Comments
 (0)