-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathDay 35.2.txt
103 lines (89 loc) · 2.36 KB
/
Day 35.2.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
1200. Minimum Absolute Difference
Given an array of distinct integers arr, find all pairs of elements with the minimum absolute difference of any two elements.
Return a list of pairs in ascending order(with respect to pairs), each pair [a, b] follows
a, b are from arr
a < b
b - a equals to the minimum absolute difference of any two elements in arr
Example 1:
Input: arr = [4,2,1,3]
Output: [[1,2],[2,3],[3,4]]
Explanation: The minimum absolute difference is 1. List all pairs with difference equal to 1 in ascending order.
Example 2:
Input: arr = [1,3,6,10,15]
Output: [[1,3]]
Example 3:
Input: arr = [3,8,-10,23,19,-4,-14,27]
Output: [[-14,-10],[19,23],[23,27]]
Constraints:
2 <= arr.length <= 10^5
-10^6 <= arr[i] <= 10^6
class Solution {
static int a[];
public List<List<Integer>> minimumAbsDifference(int[] ar) {
List<List<Integer>> nm=new ArrayList<List<Integer>>();
a=new int[ar.length];
int i,k=Integer.MAX_VALUE;
for(i=0;i<a.length;i++)
{
a[i]=ar[i];
}
task(a,0,ar.length-1);
for(i=0;i<a.length-1;i++)
{
if((Math.abs(a[i]-a[i+1]))<k)
{
k=Math.abs(a[i]-a[i+1]);
}
}
ArrayList<Integer> yy=new ArrayList<>();
for(i=0;i<a.length-1;i++)
{
if((Math.abs(a[i]-a[i+1]))==k)
{
yy.add(a[i]);
yy.add(a[i+1]);
nm.add(new ArrayList (yy));
yy.clear();
}
}
return nm;
}
void task(int n[] , int i , int j)
{
if(i<j)
{
int m=(i+j)/2;
task(n,i,m);
task(n,m+1,j);
task1(n,i,m,j);
}
}
void task1(int n[] , int s , int mid , int e)
{
int i=s,j=mid+1,k=0;
int b[]=new int[e-s+1];
while(i<=mid&&j<=e)
{
if(n[i]<=n[j])
{
b[k++]=n[i++];
}
else
{
b[k++]=n[j++];
}
}
while(i<=mid)
{
b[k++]=n[i++];
}
while(j<=e)
{
b[k++]=n[j++];
}
for(i=s;i<=e;i++)
{
a[i]=b[i-s];
}
}
}