return the index of that peek or valey

63 篇文章 0 订阅

给定一个array,条件:1. A[i] = A[i-1]+-1; 2. There is only one peek or one valey in the array, return the index of that peek or valey.

public static int find(int[] nums) {
		if (nums.length == 0)
			return -1;
		int len = nums.length;
		if (Math.abs(nums[len - 1] - nums[0]) == len - 1)
			return -1;// There is no such a valley or peak
		return helper(nums, 0, len - 1);

	}

	public static int helper(int[] nums, int start, int end) {
		int mid = start + (end - start) / 2;
		if ((nums[mid - 1] - nums[mid]) * (nums[mid + 1] - nums[mid]) > 0)
			return nums[mid];
		int diffOfIndex = mid - start;
		int diffOfValue = Math.abs(nums[mid] - nums[start]);
		if (diffOfIndex == diffOfValue)
			start = mid;
		else
			end = mid;
		return helper(nums, start, end);

	}

	public static void main(String[] args) {
		int[] nums1 = { 1, 2, 3, 4, 3, 2 };
		int[] nums2 = {};
		int[] nums3 = { 1, 2, 3, 4, 5, 6, 7, 8, 7 };
		int[] nums4 = { 1, 2, 3, 4, 5 };
		int[] nums5 = { 5, 4, 3, 2, 1, 2, 3 };
		int[] nums6 = { 9, 8, 7, 6, 7 };
		System.out.println(find(nums1));
		System.out.println(find(nums2));
		System.out.println(find(nums3));
		System.out.println(find(nums4));
		System.out.println(find(nums5));
		System.out.println(find(nums6));
	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值