Skip to content

Commit 14f3bef

Browse files
add kotlin solution for 973 K-Closest-Points-To-Origin.kt
1 parent b7adf99 commit 14f3bef

File tree

1 file changed

+126
-0
lines changed

1 file changed

+126
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
class KClosestPointstoOriginKotlin973 {
2+
fun kClosest(points: Array<IntArray>, K: Int): Array<IntArray> {
3+
var start = 0
4+
var end = points.size - 1
5+
while (start < end) {
6+
val flag = quickSort(points, start, end)
7+
when {
8+
flag == K -> return points.copyOfRange(0, K)
9+
flag < K -> start = flag
10+
flag > K -> end = flag
11+
}
12+
}
13+
return points.copyOfRange(0, K)
14+
}
15+
16+
private fun quickSort(nums: Array<IntArray>, start: Int, end: Int): Int {
17+
// val pivot = nums[start + (end - start).shr(1)]
18+
val pivot = nums[start]
19+
var left = start
20+
var right = end
21+
while (left <= right) {
22+
while (left <= right && compare(pivot, nums[left]) > 0) {
23+
++left
24+
}
25+
while (left <= right && compare(pivot, nums[right]) < 0) {
26+
--right
27+
}
28+
if (left <= right) {
29+
val temp = nums[left]
30+
nums[left] = nums[right]
31+
nums[right] = temp
32+
++left
33+
--right
34+
}
35+
}
36+
return left
37+
}
38+
39+
private fun compare(point1: IntArray, point2: IntArray): Int {
40+
return compareValues(
41+
point1[0] * point1[0] + point1[1] * point1[1],
42+
point2[0] * point2[0] + point2[1] * point2[1]
43+
)
44+
}
45+
46+
/*
47+
fun kClosest(points: Array<IntArray>, K: Int): Array<IntArray> {
48+
val priorityQueue: PriorityQueue<IntArray> = PriorityQueue(K, Comparator { point1, point2 ->
49+
compareValues(
50+
point2[0] * point2[0] + point2[1] * point2[1],
51+
point1[0] * point1[0] + point1[1] * point1[1]
52+
)
53+
})
54+
points.forEach {
55+
priorityQueue.offer(it)
56+
if (priorityQueue.size - K > 0) {
57+
priorityQueue.poll()
58+
}
59+
}
60+
return priorityQueue.toTypedArray()
61+
}
62+
*/
63+
64+
/*
65+
fun kClosest(points: Array<IntArray>, K: Int): Array<IntArray> {
66+
points.sortWith(Comparator { point1, point2 ->
67+
compareValues(
68+
point1[0] * point1[0] + point1[1] * point1[1],
69+
point2[0] * point2[0] + point2[1] * point2[1]
70+
)
71+
})
72+
return points.copyOfRange(0, K)
73+
}
74+
*/
75+
}
76+
77+
fun main() {
78+
val solution = KClosestPointstoOriginKotlin973()
79+
80+
println("=======10 7=========")
81+
solution.kClosest(
82+
arrayOf(
83+
intArrayOf(-2, 10),
84+
intArrayOf(-4, -8),
85+
intArrayOf(10, 7),
86+
intArrayOf(-4, -7)
87+
), 3
88+
).forEach {
89+
it.forEach { n -> print("$n ") }
90+
println()
91+
}
92+
93+
solution.kClosest(arrayOf(intArrayOf(0, 1), intArrayOf(1, 0)), 2).forEach {
94+
it.forEach { n -> print("$n ") }
95+
println()
96+
}
97+
98+
println("=========3 3 -2 4=======")
99+
solution.kClosest(arrayOf(intArrayOf(3, 3), intArrayOf(5, -1), intArrayOf(-2, 4)), 2).forEach {
100+
it.forEach { n -> print("$n ") }
101+
println()
102+
}
103+
104+
println("=========-2,2=======")
105+
solution.kClosest(arrayOf(intArrayOf(1, 3), intArrayOf(-2, 2)), 1).forEach {
106+
it.forEach { n -> print("$n ") }
107+
println()
108+
}
109+
110+
println("=========1,1=======")
111+
solution.kClosest(
112+
arrayOf(
113+
intArrayOf(2, 2),
114+
intArrayOf(2, 2),
115+
intArrayOf(2, 2),
116+
intArrayOf(2, 2),
117+
intArrayOf(2, 2),
118+
intArrayOf(2, 2),
119+
intArrayOf(1, 1)
120+
),
121+
1
122+
).forEach {
123+
it.forEach { n -> print("$n ") }
124+
println()
125+
}
126+
}

0 commit comments

Comments
 (0)