java面试算法题

package link;
/**
 *1. 如何判断一个数是否为2的整数次幂
 *2.无序数组后的最大相邻差
 * @author 
 *
 */
public class sort3 {
	/*
	 * 第一题
	 */
/*	public static boolean isPowerOf2(int num) {
		return (num&num-1)==0;
	}
	public static void main(String[] args) {
		System.out.println(isPowerOf2(9));
		System.out.println(isPowerOf2(128));
	}*/
	/*
	 * 第二题
	 */
	public static int getMaxSortedDistance(int[] array) {
		//1.得到数列的最大值和最小值
		int max=array[0];
		int min=array[0];
		for (int i = 1; i < array.length; i++) {
			if(array[i]>max) {
				max=array[i];
			}
			if(array[i]<min) {
				min=array[i];
			}
		}
		int d=max-min;
		//如果max和min相等,说明数组所有元素都相等,返回0
		if(d==0) {
			return 0;
		}
		//初始化桶
		int bucketNum=array.length;
		Bucket[] buckets=new Bucket[bucketNum];
		for (int i = 0; i < bucketNum; i++) {
			buckets[i]=new Bucket();
		}
		//遍历原始数组,确定每个桶的最大最小值
		for (int i = 0; i < array.length; i++) {
			//确定数组元素所归属的桶下标
			int index=((array[i]-min)*(bucketNum-1)/d);
			if(buckets[index].min==null||buckets[index].min>array[i]) {
				buckets[index].min=array[i];
			}
			if(buckets[index].max==null||buckets[index].max<array[i]) {
				buckets[index].max=array[i];
			}
		}
		//遍历桶,找到最大差值
		int leftMax=buckets[0].max;
		int maxDistance=0;
		for (int i = 1; i < buckets.length; i++) {
			if(buckets[i].min==null) {
				continue;
			}
			if(buckets[i].min-leftMax>maxDistance) {
				maxDistance=buckets[i].min-leftMax;
			}
			leftMax=buckets[i].max;
		}
		return maxDistance;
	}
	/*
	 * 桶
	 */
	private static class Bucket{
		Integer min;
		Integer max;
	}
	public static void main(String[] args) {
		int[] array=new int[] {2,6,3,4,5,10,9};
		System.out.println(getMaxSortedDistance(array));
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值