Мне был задан массив чисел (целое число), и мне нужно вернуть элемент, если сумма чисел в его правой части равна сумма чисел в его левом размере в o (n).Проверьте, равна ли сумма левой части массива правой стороне массива в o (n)
Например массив {1,2,2,9,3,2} программа должна напечатать 9, потому что 1 + 2 + 2 = 5 и 3 + 2 = 5
Я приложил свой код, но это не о (n) сложность. оцените вашу помощь.
Спасибо.
public class Program {
public static void checkIfEqualOption1(int[] arr){
int sumRight = 0;
int sumLeft=0;
//sumRight+=numbers[0];
for (int i=0; i < arr.length; i++){
if (i>0){
sumRight+=arr[i-1];
for (int j=i+1; j<arr.length; j++){
sumLeft+=arr[j];
}
if (sumRight==sumLeft){
System.out.println("\nFound = "+arr[i]);
break;
}
}
}
}
public static void print(int[] arr){
for (int i=0; i < arr.length; i++){
System.out.print(arr[i] + " ");
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("Hi");
int[] numbers = {1,2,2,9,3,2};
System.out.println("Array numbers:");
for (int i=0; i < numbers.length; i++){
System.out.print(numbers[i] + " ");
}
System.out.println("\n");
checkIfEqualOption1(numbers);
}
}
Я бы просто нашел среднюю точку, а затем два отдельных для петель. Первый цикл цикла суммирует значения до середины, а второй цикл будет суммировать значения после середины. Затем просто сравните две суммы и, если они равны, верните среднее значение массива. –
Разделите и победите, и проверьте последние две суммы до слияния последнего времени. – MeetTitan
Вопрос o (n) или O (n), маленькая или большая нотация O? – cuongptnk