Пример ввода:
8 // Размер массива
3 4 5 7 8 9 4 3 // Voltage
Пример вывода:
6// 9-3 [9 - пиковое напряжение и 3 - точка изложения]
Это код, который я написал:
import java.util.Scanner;
import java.util.Arrays;
import java.util.ArrayList;
import java.util.List;
import java.util.Collections;
public class Main
{
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
int size = scan.nextInt();
scan.nextLine();
String input = scan.nextLine();
String[] s = input.split(" ");
List <Integer> list = new ArrayList<Integer>();
for(int i=0 ; i<size ; i++)
{
list.add(Integer.parseInt(s[i]));
}
list.sort(Collections.reverseOrder());
System.out.println(list.get(0)-list.get(list.size()-1));
//System.out.println("LAST : " +list.get(0)+"FIRST :"+list.get(list.size()-1));
}
}
Но это работает только для одного пика.но что, если ввод будет что-то вроде:
12 // размер массива
1 2 3 4 2 1 -1 0 2 7 5 4 // напряжения
ответ должен быть
Первый спайк:
Start Point = 1
Peak Point = 4
Spike height = 4 - 1 = 3.
Второй спайк:
Start Point = -1
Peak Point = 7
Spike height = 7 - (-1) = 8.
Я попытался разделить список на два списка, каждая из которых имеет свое пиковое значение.
Я ищу решение, которое может найти любое количество шипов.
Спасибо!
РЕДАКТИРОВАТЬ: --------
int temp = 0;
int count = 0;
int foo = 0;
for(int i=0 ; i<list.size()-1 ; i++)
{
temp = list.get(i);
if(list.get(i+1)-temp == 1)
{
count++;
}
else
{
foo++;
}
}
Я пробовал выше, используя count и foo в качестве индексов списка:
System.out.println(list.get(count)-list.get(0));
System.out.println(list.get((count)+foo)-list.get(foo));