Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class Main {
- private int pitStart = -1, pitCenter = -1, pitFinish = -1;
- public static void main(String[] args) {
- int[] a = {0, 1, 3, -2, 0, 1, 0, -3, 2, 3};
- System.out.println("Result: " + new Main().solution(a));
- }
- private void startPit( int index){
- pitStart = index;
- System.out.printf("pit start: %s\n", pitStart);
- }
- private int finishPit( int[] a, int i){
- pitFinish = i;
- System.out.printf("pit start: %s, pit centre: %s, pit finish: %s\n", pitStart, pitCenter, pitFinish);
- int d = Math.min( a[pitStart] - a[pitCenter], a[pitFinish] - a[pitCenter]);
- clearPit();
- return d;
- }
- public int solution(int[] a) {
- int depth = -1;
- for (int i = 0; i < a.length - 1; i++) {
- if (a[i] >= a[i + 1] && isRising()) {
- depth = Math.max(depth, finishPit(a, i));
- }
- if (a[i] > a[i + 1] && pitStart < 0) {
- startPit(i);
- }
- if (a[i] < a[i + 1] && isDescending()) {
- centerPit(i);
- }
- if (a[i] == a[i + 1]) {
- clearPit();
- }
- }
- if (isRising()) {
- depth = Math.max(depth, finishPit(a, a.length - 1));
- }
- return depth;
- }
- private boolean isDescending() {
- return pitCenter < 0 && pitStart >= 0;
- }
- private boolean isRising() {
- return pitStart >= 0 && pitCenter >= 0;
- }
- private void clearPit() {
- pitStart = pitCenter = pitFinish = -1;
- }
- private void centerPit(int i) {
- pitCenter = i;
- System.out.printf("pit centre: %s\n", pitCenter);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement