java面试题:数组的常用算法实现

来源:互联网 发布:java函数调用关系图 编辑:程序博客网 时间:2024/06/06 09:59
package com.bxh.array;public class ArrayTest {private static int max(int m,int n) {return m>n?m:n;}private static int min(int m, int n) {return m>n?n:m;}//递归查找数组中最大的数private static int findMax(int[] num,int begin) {// TODO Auto-generated method stubint n=num.length;int len=n-begin;if(len==1){return num[begin];}else{return max(num[begin],findMax(num,begin+1));}}//直接查找法:求数组中一个数字减去它右边子数组中的一个数字中最大的差值private static int getmax(int[] a) {// TODO Auto-generated method stubint n=a.length;if(a==null || n<=1){return Integer.MIN_VALUE;}int max=Integer.MIN_VALUE;for (int i = 0; i < n-1; i++) {for(int j=i+1;j<n;j++){if(a[i]-a[j]>max){max=a[i]-a[j];}}}return max;}//动态规划实现差值最大方法private static int getMax1(int[] a) {// TODO Auto-generated method stubint len=a.length;int[] diff=new int[len];int[] max=new int[len];if(a==null || len<=1){return Integer.MIN_VALUE;}diff[0]=Integer.MIN_VALUE;max[0]=a[0];for(int i=1;i<len;i++){diff[i]=max(diff[i-1],max[i-1]-a[i]);max[i]=max(max[i-1],a[i]);}return diff[len-1];}//对数组的两个子有序段进行合并private static void sort1(int[] a, int mid) {int len=a.length;for (int i = 0; i < mid; i++) {if(a[mid]<a[i]){swap(a,i,mid);for(int j=mid;j<len-1;j++){if(a[j+1]<a[j]){swap(a,i,i+1);}}}}}private static void sort(int[] a, int mid) {// TODO Auto-generated method stubint tmp;for (int i = 0; i < mid; i++) {if(a[mid]<a[i]){swap(a,i,mid);findRightForMid(a,mid);}}}private static void findRightForMid(int[] a, int mid) {int len=a.length;for(int i=mid;i<len-1;i++){if(a[i+1]<a[i]){swap(a,i,i+1);}}}//交换两个函数private static void swap(int[] a, int i, int j) {// TODO Auto-generated method stubint tmp;tmp=a[i];a[i]=a[j];a[j]=tmp;}//求数组中两个元素的最小距离private static int minDistance(int[] a, int m, int n) {// TODO Auto-generated method stubif(a==null){return Integer.MIN_VALUE;}int len=a.length;int m_index=-1;int n_index=-1;int min_dist=Integer.MIN_VALUE+1;for(int i=0;i<len;i++){if(a[i]==m){m_index=i;}if(n_index>=0){min_dist=min(Math.abs(n_index-m_index),Math.abs(min_dist));}if(a[i]==n){n_index=i;}if(m_index>=0){min_dist=min(Math.abs(n_index-m_index),Math.abs(min_dist));}}return min_dist;}public static void main(String[] args) {int[] num={2,3,4,5,5,3,5,7,4,3,2};System.out.println("=================递归查找数组中最大的值===================");int result=findMax(num,0);System.out.println(result);System.out.println("=================动态规划实现差值最大方法==================");int max=getMax1(num);System.out.println(max);System.out.println("=================两个元素中最小距离======================");System.out.println(minDistance(num,3,5));System.out.println("=================对数组的两个子有序段进行合并===============");int[] a={1,5,6,7,15,2,4,8,10,13,14};//sort(a,5);sort1(a,5);for (int i = 0; i < a.length; i++) {System.out.print(a[i]+" ");}}}