leetcode1007

两个列表元素交换次数最少,达到其中一个列表元素全部相同.
思路:贪心,要全部相同,必定其中一个值得次数超过1/2.
坑是:条件给了两列表相等,实际有一组数据两列表不等..

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
class Solution {
public int minDominoRotations(int[] A, int[] B) {
int[] s = new int[7];
for(int i=0;i<7;i++){
s[i] = 0;
}

int cache = 0;
int len = A.length;
int blen = B.length;
if (len>blen){
len = blen;
}
for(int i=0;i<len;i++){
s[A[i]]++;
cache = B[i];
s[cache]++;
}
int t = -1;
int max = 0;
for(int i=0;i<7;i++){
if (s[i]>max){
max = s[i];
t = i;
}
}

int achange = 0;
int bchange = 0;
for(int i=0;i<len;i++){
if (A[i]==t && B[i]!=t){
achange++;
}else
if (B[i]==t && A[i]!=t){
bchange++;
}else
if (A[i]!=t && B[i]!=t ){
return -1;
}
}
if (achange<bchange){
return achange;
}
return bchange;
}
}