《程序员代码面试指南》第七章 位运算 在其他数都出现k 次的数组中找到只出现一次的数

题目

在其他数都出现k 次的数组中找到只出现一次的数

java 代码

package com.lizhouwei.chapter7;

/**
 * @Description: 在其他数都出现k 次的数组中找到只出现一次的数
 * @Author: lizhouwei
 * @CreateDate: 2018/4/28 21:20
 * @Modify by:
 * @ModifyDate:
 */
public class Chapter7_6 {

    public int getOnceNum(int[] arr, int k) {
        int[] eo = new int[32];
        for (int i = 0; i < arr.length; i++) {
            int[] kSys = getKSysNum(arr[i], k);
            for (int j = 0; j < eo.length; j++) {
                eo[j] = (eo[j] + kSys[j]) % k;
            }
        }
        return getFromKSysNum(eo, k);

    }

    public int[] getKSysNum(int value, int k) {
        int[] res = new int[32];
        int index = 0;
        while (value != 0) {
            res[index++] = value % k;
            value = value / k;
        }
        return res;
    }

    public int getFromKSysNum(int[] eo, int k) {
        int res = 0;
        for (int i =eo.length-1; i>-1; i--) {
            res = res * k + eo[i];
        }
        return res;
    }

    //测试
    public static void main(String[] args) {
        Chapter7_6 chapter = new Chapter7_6();
        int[] arr = {1, 1, 2, 3, 3, 4, 4, 5, 5};
        int reslt = chapter.getOnceNum(arr,2);
        System.out.print("{1,1,2,3,3,4,4,5,5}中");
        System.out.println("只出现一次的数为:" + reslt);
    }
}

结果

猜你喜欢

转载自www.cnblogs.com/lizhouwei/p/8969708.html