Skip to content

Commit 050fcee

Browse files
committedSep 11, 2016
Contest/src/_20160910_4th_contest/IntegerReplacement.java
1 parent 4d14f28 commit 050fcee

File tree

1 file changed

+89
-0
lines changed

1 file changed

+89
-0
lines changed
 
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
package _20160910_4th_contest;
2+
3+
import java.util.HashSet;
4+
import java.util.Iterator;
5+
import java.util.LinkedList;
6+
import java.util.Queue;
7+
import java.util.Set;
8+
9+
public class IntegerReplacement {
10+
public static int integerReplacement_failed(int n) {
11+
if(n == 1) return 0;
12+
int steps = 0;
13+
while(n != 1){
14+
if(n%2 == 1 && n > 1) {
15+
n -= 1;
16+
steps++;
17+
}
18+
19+
n /= 2;
20+
steps++;
21+
}
22+
return steps;
23+
}
24+
25+
public static int integerReplacement_failed_2(int n) {
26+
if(n == 1) return 0;
27+
int temp = 2, steps = 1;
28+
while(temp <= n){
29+
temp *= 2;
30+
steps++;
31+
32+
if(temp%2 == 1){
33+
temp += 1;
34+
steps++;
35+
}
36+
}
37+
return steps;
38+
}
39+
40+
public static int integerReplacement(int n) {
41+
long min = Long.MAX_VALUE;
42+
Set<long[]> set = new HashSet();
43+
Queue<long[]> q = new LinkedList();
44+
long[] pair = new long[]{n, 0};
45+
q.offer(pair);
46+
while(!q.isEmpty()){
47+
int size = q.size();
48+
for(int i = 0; i < size; i++){
49+
long[] curr = q.poll();
50+
if(curr[0] == 1) set.add(curr);
51+
else {
52+
53+
if (curr[0] % 2 == 0) {
54+
curr[0] /= 2;
55+
curr[1]++;
56+
q.offer(curr);
57+
} else {
58+
long[] minus = new long[2];
59+
minus[0] = curr[0] - 1;
60+
minus[1] = curr[1] + 1;
61+
q.offer(minus);
62+
63+
long[] plus = new long[2];
64+
plus[0] = curr[0] + 1;
65+
plus[1] = curr[1] + 1;
66+
q.offer(plus);
67+
}
68+
}
69+
}
70+
}
71+
72+
Iterator<long[]> it = set.iterator();
73+
while(it.hasNext()){
74+
min = Math.min(min, it.next()[1]);
75+
}
76+
return (int) min;
77+
}
78+
79+
public static void main(String...strings){
80+
System.out.println(integerReplacement(2147483647));
81+
System.out.println(integerReplacement(65535));//should be 17
82+
System.out.println(integerReplacement(1234));//should be 14
83+
// System.out.println(integerReplacement(1));
84+
// System.out.println(integerReplacement(2));
85+
// System.out.println(integerReplacement(3));
86+
System.out.println(integerReplacement(5));//should be 3
87+
// System.out.println(integerReplacement(7));
88+
}
89+
}

0 commit comments

Comments
 (0)