1.非递归方式实现求解斐波那契数列第n个元素
public int fib1(int n){
int result=0;
int preOne=1;
int preTwo=0;
if(n==0)
return result;
if(n==1)
return preOne;
for(int i=0;i<n;i++){
result=preOne+preTwo;
preTwo=preOne;
preOne=result;
}
return result;
}
2.递归方式求解斐波那契数列第n个元素
public int fib2(int n){
if(n==0)
return 0;
if(n==1)
return 1;
if(n==2)
return 1;
return fib2(n-1)+fib(n-2);
}
3.求数组中最小的k个元素
//一般我们会想先对数组进行排序,这里并不排序
public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
ArrayList<Integer> list=new ArrayList<Integer>();
//检查输入数组
if(k<=0||input.length<k)
return list;
for(int i=0;i<k;i++){
list.add(input[i]);
}
for(int i=k;i<input.length;i++){
int j=this.getMax(list);
int temp=(Integer)list.get(j);
if(input[i]<temp){
list.set(j,input[i]);
}
}
return list;
}
public int getMax(ArrayList<Integer> list){
int max=list.get(0);
int j=0;
for(int i=0;i<list.size();i++){
if(list.get(i)>max){
max=list.get(i);
j=i;
}
}
return j;
}
//下面演示采用堆排序的解决方案
public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
ArrayList<Integer> list=new ArrayList<Integer>();
//检查输入数组
if(k<=0||input.length<k)
return list;
int[] kArr=Arrays.copyOfRange(input,0,k);
//创建大根堆
buildHeap(kArr);
for(int i=k;i<input.length;i++){
if(input[i]<kArr[0]){
kArr[0]=input[i];
maxHeap(kArr,0);
}
}
for(int i=kArr.length-1;i>=0;i--){
list.add(kArr[i]);
}
return list;
}
public void buildHeap(int[] arr){
for(int i=arr.length/2-1;i>=0;i--){
maxHeap(arr,i);
}
}
public void maxHeap(int[] arr,int i){
int left=2*i+1;
int right=left+1;
int largest=0;
if(left<arr.length&&arr[left]>arr[right]){
largest=left;
}else{
largest=i;
}
if(right<arr.length&&arr[right]>arr[left])
largest=right;
if(largest!=null){
int tmp=arr[i];
arr[i]=arr[largest];
arr[largest]=tmp;
maxHeap(arr,largest);
}
}
4 数组
要求输入一个数组,调整数组位置,使得调整后的数组中,奇数位于数组的前半部分,偶数位于数组的后半部分,且奇数与奇数,偶数与偶数之间的相对位置不变。
public static void reOrderArray(int[] arr){
if(arr==null)
return;
for(int i=1;i<arr.length;i++){
int j=i-1;
int temp=arr[i];
if(arr[i]%2!=0){
while(j>=0){
if(arr[j]%2!=0)
break;
if(arr[j]%2==0){
int t=arr[j+1];
arr[j+1]=arr[j];
arr[j]=temp;
j--;
}
}
}
arr[j+1]=temp;
}
}