微软面试-101-有一个整数数组,请求出两两之差绝对值最小的值,

来源:互联网 发布:金庸 江南 知乎 编辑:程序博客网 时间:2024/05/17 01:37
//1、有一个整数数组,请求出两两之差绝对值最小的值,//记住,只要得出最小值即可,不需要求出是哪两个数。////O(N+NlogN)解法//排序//区最小相邻差绝对值 //O(N+N)解法//思路  设原数组为a[] = a1 a2 a3 a4 a5 a6 a7 a8//得数组 b[a.length-1] = a1-a2 a2-a3 a3-a4 a5-a6 a6-a7 a7-a8//两个相邻数相减//得C[] = min (|bi+ci-1|,|bi|) 最小连续子序列和public class Problem101 {static public void print(Object o){System.out.println(o);}public static int cal(int[] iSrc){int iBSrc[] = new int[iSrc.length];//int i;for ( i = 0; i<iSrc.length - 1 ; i++){//iBSrc[i] = iSrc[i] - iSrc[i+1];}//for ( i = 0; i<iSrc.length -1; i++){//System.out.print(iBSrc[i]+" ");//}//System.out.println("-------------B-----------");int iCRs[] = new int[iSrc.length];iCRs[0] = iBSrc[0];int iMin = Math.abs(iBSrc[0]);for ( i = 1; i<iSrc.length - 1; i++){if (Math.abs(iBSrc[i] + iCRs[i - 1]) < Math.abs(iBSrc[i])){iCRs[i] = iBSrc[i] + iCRs[i - 1];iMin = Math.abs(iCRs[i]) > Math.abs(iMin) ?Math.abs(iMin) :Math.abs(iCRs[i]);}else iCRs[i] = iBSrc[i];}//for ( i = 0; i<iSrc.length - 1 ; i++){////System.out.print(iCRs[i]+" ");//}//System.out.println("-------------C-----------");return iMin;}public static void main(String args[]){int iASrc[] = {-7,80,1,-9,30,5};//int iASrc[] = {5,998,1,999,5};//int iASrc[] = {5,-999,1,999,6};print(cal(iASrc));}}

原创粉丝点击