public class GetMissingNumber {
public static int getMissingNumber(int[] array,int length){
if(array == null || length <= 0){
return -1;
}
return getMissingNumber(array,length,0,length - 1);
}
public static int getMissingNumber(int[] array, int length, int start, int end){
if(start > end){
return -1;
}
int middleIndex = (start + end)/2;
int data = array[middleIndex];
if(middleIndex == data){
start = middleIndex + 1;
}else{
if((middleIndex > 0 && array[middleIndex - 1] == middleIndex - 1) || middleIndex == 0){
return middleIndex;
}else{
end = middleIndex - 1;
}
}
return getMissingNumber(array,length,start,end);
}
public static void main(String[] args) {
int[] array = {0,1,2,3,5,6};
System.out.println(getMissingNumber(array, array.length));
}
}
public class GetNumberOfK {
public static int getFirstK(int[] array,int start,int end,int k){
if(start > end){
return -1;
}
int index = (start + end) / 2;
if(array[index] == k){
if((index > 0 && array[index - 1] != k ) || index == 0 ){
return index;
}else{
end = index - 1;
}
}else if(array[index] > k){
end = index - 1;
}else{
start = index + 1;
}
return getFirstK(array,start,end,k);
}
public static int getLastK(int[] array,int start,int end,int k){
if(start > end){
return -1;
}
int index = (start + end) / 2;
int middleData = array[index];
if(middleData == k){
if((index < array.length - 1 && array[index + 1] != k) ||
index == array.length - 1){
return index;
}else{
start = index + 1;
}
}else if(middleData > k){
start = index + 1;
}else{
end = index - 1;
}
return getLastK(array,start,end,k);
}
public static int getNumberOfK(int[] array,int k){
int number = 0;
if(array == null || array.length <= 0){
return -1;
}else{
int first = getFirstK(array,0, array.length - 1,k);
int last = getLastK(array,0,array.length - 1,k);
number = last - first + 1;
}
return number;
}
public static void main(String[] args) {
int[] array = {1,2,3,3,3,3,4,5};
System.out.println(getNumberOfK(array, 3));
}
}
public class GetNumberSameAsIndex {
public static int getNumberSameAsIndex(int[] array, int length){
if(array == null || length <= 0){
return -1;
}
return getNumberSameAsIndex(array, length, 0, length - 1);
}
public static int getNumberSameAsIndex(int[] array, int length, int start, int end){
if(start > end){
return -1;
}
int middleIndex = (start + end) / 2;
int middleData = array[middleIndex];
if (middleData == middleIndex){
return middleData;
}else if (middleData > middleIndex){
end = middleIndex - 1;
}else{
start = middleIndex + 1;
}
return getNumberSameAsIndex(array,length,start,end);
}
public static void main(String[] args) {
int[] array = {-3, -1, 1, 3, 5};
System.out.println(getNumberSameAsIndex(array, array.length - 1));
}
}
public class KthNode {
public static BinaryTreeNode kthNode(BinaryTreeNode pRoot,int k){
if(pRoot == null | k <= 0){
return null;
}
return kthBodeCore(pRoot, k);
}
public static BinaryTreeNode kthBodeCore(BinaryTreeNode pRoot, int k){
BinaryTreeNode target = null;
if(pRoot.leftNode != null){
target = kthBodeCore(pRoot.leftNode, k);
}
if(target == null){
if(k == 1){
target = pRoot;
}
k -- ;
}
if(target == null && pRoot.rightNode != null){
target = kthBodeCore(pRoot.rightNode, k);
}
return target;
}
}