package com.interview.books.ccinterview; import java.util.ArrayList; import java.util.List; /** * Created_By: stefanie * Date: 14-12-13 * Time: 下午5:37 */ public class CC17_MissingInteger { public boolean isZero(int i, int j){ return (i & (1 << j)) == 0; } public int findMissing(List<Integer> options){ return findMissing(options, 0); } private int findMissing(List<Integer> options, int offset){ if(offset >= 32) return 0; //out of range List<Integer> oneBits = new ArrayList<>(); List<Integer> zeroBits = new ArrayList<>(); for(Integer i : options){ if(isZero(i, offset)) zeroBits.add(i); else oneBits.add(i); } if(zeroBits.size() <= oneBits.size()){ int v = findMissing(zeroBits, offset + 1); return (v << 1) | 0; } else { int v = findMissing(oneBits, offset + 1); return (v << 1) | 1; } } public static void main(String[] args){ List<Integer> options = new ArrayList<>(); for(int i = 0; i <= 10; i++) options.add(i); options.remove(7); CC17_MissingInteger finder = new CC17_MissingInteger(); System.out.println(finder.findMissing(options)); } }