import java.util.*; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); long[] a = new long[n]; for (int i = 0; i < n; i++) { a[i] = scanner.nextLong(); } System.out.println(minOperations(a, n)); scanner.close(); } private static Long minOperations(long[] a, int n) { // 情况1:如果数组中所有元素已经相同,返回0 if (allElementsSame(a, n)) { return 0L; } // 检查数组中是否包含0 boolean hasZero = false; for (long num : a) { if (num == 0) { hasZero = true; break; } } // 情况2:如果数组元素不相同且不包含0,则不可能完成,返回-1 if (!hasZero) { return -1L; } // 收集所有正整数并去重 Set<Long> positiveNumbers = new HashSet<>(); for (long num : a) { if (num > 0) { positiveNumbers.add(num); } } // 将去重后的正整数转换为列表并排序 List<Long> positives = new ArrayList<>(positiveNumbers); Collections.sort(positives); // 正整数的个数使用int类型 int m = positiveNumbers.size(); // 最大的正整数 long maxP = positives.get(m - 1); // 应用公式计算结果:maxP - (m - 1) return maxP - (m - 1); } // 检查数组是否所有元素都相同 private static boolean allElementsSame(long[] a, int n) { if (n <= 1) { return true; // 空数组或只有1个元素,自然所有元素相同 } long first = a[0]; // 以第一个元素为基准 for (int i = 1; i < n; i++) { if (a[i] != first) { // 只要有一个元素与基准不同,就返回false return false; } } return true; // 所有元素都与基准相同,返回true } }