-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path2938.go
75 lines (69 loc) · 2.05 KB
/
2938.go
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
// Source: https://leetcode.com/problems/separate-black-and-white-balls
// Title: Separate Black and White Balls
// Difficulty: Medium
// Author: Mu Yang <http://muyang.pro>
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// There are n balls on a table, each ball has a color black or white.
// You are given a 0-indexed binary string s of length n, where 1 and 0 represent black and white balls, respectively.
// In each step, you can choose two adjacent balls and swap them.
// Return the minimum number of steps to group all the black balls to the right and all the white balls to the left.
//
// Example 1:
//
// Input: s = "101"
// Output: 1
// Explanation: We can group all the black balls to the right in the following way:
// - Swap s[0] and s[1], s = "011".
// Initially, 1s are not grouped together, requiring at least 1 step to group them to the right.
//
// Example 2:
//
// Input: s = "100"
// Output: 2
// Explanation: We can group all the black balls to the right in the following way:
// - Swap s[0] and s[1], s = "010".
// - Swap s[1] and s[2], s = "001".
// It can be proven that the minimum number of steps needed is 2.
//
// Example 3:
//
// Input: s = "0111"
// Output: 0
// Explanation: All the black balls are already grouped to the right.
//
// Constraints:
//
// 1 <= n == s.length <= 10^5
// s[i] is either '0' or '1'.
//
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
package main
// Bubble sort (TLE)
func minimumSteps(s string) int64 {
before := int64(0)
after := int64(0)
j := 0
for i, ch := range s {
if ch == '0' {
before += int64(i)
after += int64(j)
j++
}
}
return before - after
}
// Bubble sort
func minimumSteps2(s string) int64 {
n := len(s)
arr := []byte(s)
res := int64(0)
for i := n - 1; i >= 0; i-- {
for j := 0; j < i; j++ {
if arr[j] > arr[j+1] {
arr[j], arr[j+1] = arr[j+1], arr[j]
res++
}
}
}
return res
}