您的位置:首页 > 编程语言 > Java开发

将m,n(m>n)的连续自然数序列,打乱顺序重新排列,随机取出一个数,试问取出的这个数是多少?使用一种解法,时间复杂度O(m-n),空间复杂度O(1)

2014-05-15 00:43 941 查看
注意首先这里的数的个数可能很大,所以不能够把这些数都加起来,这样做会越界而且效率不高,我这里使用的方法是位运算。通过抑或特有的性质.A^B=C 则同时有 B^C=A 无参数的交换 也同样是借助了这个性质。Java代码如下

package algorithm.bitwise;

public class SelectAbsentNum {
private int m = 15;
private int n = 5;
private int[] testList = { 7, 5, 8, 13, 6, 12, 10, 15, 14, 11 };
private int originalResult() {
if (n < m) {
int res = 0;
for (int i = n; i <= m; i++) {
res ^= i;
}
return res;
}
return 0;
}

private int testResult() {
if(testList != null){
int res = 0;
for (int i : testList) {
res ^= i;
}
return res;
}
return 0;
}

public int getAbsentNum() {
return originalResult() ^ testResult();
}

public static void main(String[] args) {
System.out.println(new SelectAbsentNum().getAbsentNum());;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 算法 抑或运算
相关文章推荐