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 stub
int 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 stub
int 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 stub
int 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 stub
int 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 stub
int 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 stub
if(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]+" ");
}
}
}
java面试题:数组的常用算法实现
猜你喜欢
转载自blog.csdn.net/qq_32261399/article/details/77800912
今日推荐
周排行