forked from Ritesh25696/interviewBit
-
Notifications
You must be signed in to change notification settings - Fork 0
/
flip
62 lines (51 loc) · 1.83 KB
/
flip
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
You are given a binary string(i.e. with characters 0 and 1) S consisting of characters S1, S2, …, SN. In a single operation, you can choose two indices L and R such that 1 ≤ L ≤ R ≤ N and flip the characters SL, SL+1, …, SR. By flipping, we mean change character 0 to 1 and vice-versa.
Your aim is to perform ATMOST one operation such that in final string number of 1s is maximised. If you don’t want to perform the operation, return an empty array. Else, return an array consisting of two elements denoting L and R. If there are multiple solutions, return the lexicographically smallest pair of L and R.
Notes:
- Pair (a, b) is lexicographically smaller than pair (c, d) if a < c or, if a == c and b < d.
For example,
S = 010
Pair of [L, R] | Final string
_______________|_____________
[1 1] | 110
[1 2] | 100
[1 3] | 101
[2 2] | 000
[2 3] | 001
We see that two pairs [1, 1] and [1, 3] give same number of 1s in final string. So, we return [1, 1].
**************************************************************************************************************************
vector<int> Solution::flip(string A) {
vector<int> result;
vector<int> ref(A.length() , -1);
int start = 0;
while(A[start] == '1' && start < A.size()){
start++;
}
if(start >= A.size()){
return result;
}
for(int i=start ;i<A.size() ; i++){
if(A[i] == '0' && ref[i-1] >= 0){
ref[i] = ref[i-1]+1;
}
else if(A[i] == '0' && ref[i-1] < 0){
ref[i]=1;
}
else{
ref[i] = ref[i-1]-1;
}
}
int max = ref[0];
int max_index = 0;
for(int i=0 ; i<ref.size() ; i++){
if(ref[i] > max){
max = ref[i];
max_index = i;
}
}
start = max_index;
while(start > 0 && ref[start-1] >= 0 ){
start--;
}
result.push_back(start+1);
result.push_back(max_index+1);
return result;}