maximum continuous drop

本文介绍了一种算法,该算法能够在一个给定的数列中找到最大的连续跌幅或峰值。通过分析数列的增减趋势,算法可以确定最大跌幅,并提供了具体的实现代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Given a list of number, there is only one peak or one drop. Find the maximum continuous drop.
Exps:
1 -> 2 -> 3 -> 9 -> 3 -> 0: 9 - 0 = 9;
10 -> 4 -> 3 -> 8: 10 - 3 = 7 ;

package array;

public class FindPeakOrDrop {

	public int maxDrop(int[] arr) {
		if (arr[0] > arr[1]) {
			return findDrop(arr);
		} else if (arr[0] < arr[1]) {
			return findPeak(arr);
		}
		return 0;
	}

	int findDrop(int[] arr) {
		int low = 0;
		int high = arr.length - 1;
		while (low + 2 <= high) {
			int mid = low + (high - low) / 2;
			if (arr[mid - 1] < arr[mid] && arr[mid] < arr[mid + 1]) {
				high = mid - 1;
			} else if (arr[mid - 1] > arr[mid] && arr[mid] > arr[mid + 1]) {
				low = mid + 1;
			} else {
				return arr[0] - arr[mid];
			}
		}
		int min = arr[low];
		for (int i = low + 1; i <= high; i++) {
			min = Math.min(min, arr[i]);
		}
		return arr[0] - min;
	}

	int findPeak(int[] arr) {
		int low = 0;
		int high = arr.length - 1;
		while (low + 2 <= high) {
			int mid = low + (high - low) / 2;
			if (arr[mid - 1] < arr[mid] && arr[mid] < arr[mid + 1]) {
				low = mid + 1;
			} else if (arr[mid - 1] > arr[mid] && arr[mid] > arr[mid + 1]) {
				high = mid - 1;
			} else {
				return arr[mid] - arr[arr.length - 1];
			}
		}
		int max = arr[low];
		for (int i = low + 1; i <= high; i++) {
			max = Math.max(max, arr[i]);
		}
		return max - arr[arr.length - 1];
	}

	public static void main(String[] args) {
		FindPeakOrDrop ss = new FindPeakOrDrop();
		System.out.println(ss.maxDrop(new int[] { 1, 2, 3, 9, 3, 0 }));
		System.out.println(ss.maxDrop(new int[] { 10, 4, 3, 8 }));
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值