07. Max_Sequence Equal Elements
Реших да погходя към задачата по поразличен начин.
Тествах какви ли не комбинации и започвам да се съмнявам, че проверка 10 проверява за съдържание в кода, а не за резултат.
1 2 3 4; 2 4 6 8, със и без спейс след arr[0]
масив с дължина 1ца от 0 до 9
0 0 1 1
1 1 1 3 3 5 4 1 1 5 5
1 1 1 3 3 5 4 1 1 1 1 5 5
import java.util.*; public class Max_Sequence_v1 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int[] arr = Arrays.stream(scanner.nextLine().split(" ")).mapToInt(e -> Integer.parseInt(e)).toArray(); Map<Integer, String> map = new HashMap<Integer, String>(); int n = 0; for ( int i = 0; i < arr.length-1; i++) { if (arr[i] == arr[i + 1]) { map.put(i, arr[i]+"_"+(n+=1)); } else n = 0; } int f_val = 0; int f_cnt = 0; for ( int key : map.keySet()) { String [] v = map.get(key).split("_"); int value = Integer.parseInt(v[0]); int count = Integer.parseInt(v[1]); if ((key + 1 - key == 1) && f_cnt < count ) { f_val = value; f_cnt = count; } } if (map.isEmpty()) { System.out.print(arr[0] + " "); return;} // if (f_val == 0 ) { System.out.print(arr[0]); return;} for ( int f = 0; f <= f_cnt; f++) { System.out.print(f_val + " "); } } }
тествах и с -2147483648 и 2147483647 за integer input всичко е ок.
Освен да е нещо от свойствата на hashmap! Писах друг код, ползвам List вместо HashMap, който не минава на проверка 5, но 10 е ок.
Не пиша на Java, но щом ползваш HashMap ключовете винаги трябва да са уникални и подредбата на елементите никога не се гарантира защото отдолу е имплементирана Хеш таблица. Нямам възможност да дебъгвам кода ти в момента, но щом с друга структура от данни минават някои тестове вероятно твоят подход е грешен.
Пренаписах го с List и минава. Някой ако може да ми каже каква е разликата с HashMap, ще черпа каквото пие.
До модератоторите: Моля да проверим условието на проверка 10. Много ми е интересно какво се крие отзад.
import java.util.*;
import java.util.stream.Collectors;
public class Max_Sequence_v2 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int[] arr = Arrays.stream(scanner.nextLine().split(" ")).mapToInt(e -> Integer.parseInt(e)).toArray();
Map<Integer, String> map = new HashMap<Integer, String>();
List<String> list = new ArrayList<String>();
int n = 0;
for ( int i = 0; i < arr.length-1; i++) {
if (arr[i] == arr[i + 1]) {
list.add( i+"_"+arr[i]+"_"+(n+=1));
} else n = 0;
}
int f_val = 0;
int f_cnt = 0;
for ( int x = 0; x < list.size(); x++){
String [] v = list.get(x).split("_");
int key = Integer.parseInt(v[0]);
int value = Integer.parseInt(v[1]);
int count = Integer.parseInt(v[2]);
if ((key + 1 - key == 1) && f_cnt < count ) {
f_val = value;
f_cnt = count;
}
}
if (list.isEmpty()) {System.out.print(arr[0]+ " "); return;}
for ( int f = 0; f <= f_cnt; f++) {
System.out.print(f_val + " ");
}
}
}