Если в массиве есть место в котором сумма левой и правой части массива равны
По заданным двум массивам одинаковой длины задача состоит в том, чтобы определить, равны ли данные массивы или нет. Два массива называются равными, если оба они содержат одинаковый набор элементов, хотя расположение (или перестановка) элементов может отличаться.
Примечание: если есть повторения, то количество повторяющихся элементов также должно быть одинаковым, чтобы два массива были равны.
Примеры :
Простым решением является сортировка обоих массивов, а затем линейное сравнение элементов.
using namespace std;
// Возвращает true, если arr1 [0..n-1] и arr2 [0..m-1]
// содержат одинаковые элементы.
bool areEqual( int arr1[], int arr2[], int n, int m)
// Если длины массива не равны, значит
// массив не равен
// Сортировка обоих массивов
sort(arr1, arr1 + n);
sort(arr2, arr2 + m);
// Линейное сравнение элементов
for ( int i = 0; i < n; i++)
if (arr1[i] != arr2[i])
// Если бы все элементы были одинаковыми.
int n = sizeof (arr1) / sizeof ( int );
int m = sizeof (arr2) / sizeof ( int );
if (areEqual(arr1, arr2, n, m))
// Java-программа для поиска заданных двух массивов
// равны или нет
// Возвращает true, если arr1 [0..n-1] и arr2 [0..m-1]
// содержат одинаковые элементы.
public static boolean areEqual( int arr1[], int arr2[])
int n = arr1.length;
int m = arr2.length;
// Если длины массива не равны, значит
// массив не равен
// Сортировка обоих массивов
// Линейное сравнение элементов
for ( int i = 0 ; i < n; i++)
if (arr1[i] != arr2[i])
// Если бы все элементы были одинаковыми.
public static void main(String[] args)
if (areEqual(arr1, arr2))
def areEqual(arr1, arr2, n, m):
for i in range ( 0 , n - 1 ):
if (arr1[i] ! = arr2[i]):
arr1 = [ 3 , 5 , 2 , 5 , 2 ];
arr2 = [ 2 , 3 , 5 , 5 , 2 ];
if (areEqual(arr1, arr2, n, m)):
// Возвращает true, если arr1 [0..n-1] и
// arr2 [0..m-1] содержит одинаковые элементы.
public static bool areEqual( int [] arr1,
int n = arr1.Length;
int m = arr2.Length;
// Если длины массива не
// равно означает, что массив не равен
// Сортировка обоих массивов
// Линейное сравнение элементов
for ( int i = 0; i < n; i++)
if (arr1[i] != arr2[i])
// Если бы все элементы были одинаковыми.
public static void Main()
if (areEqual(arr1, arr2))
// Этот код предоставлен anuj_67.
<?php
// PHP программа для поиска заданного
// два массива равны или нет
// Возвращает true, если arr1 [0..n-1]
// и arr2 [0..m-1] содержат одинаковые элементы.
function areEqual( $arr1 , $arr2 , $n , $m )
// Если длины массива
// не равны значит
// массив не равен
// Сортировка обоих массивов
// Линейное сравнение элементов
for ( $i = 0; $i < $n ; $i ++)
if ( $arr1 [ $i ] != $arr2 [ $i ])
// Если бы все элементы были одинаковыми.
$arr1 = array ( 3, 5, 2, 5, 2);
$arr2 = array ( 2, 3, 5, 5, 2);
if (areEqual( $arr1 , $arr2 , $n , $m ))
// Этот код предоставлен anuj_67.
?>
Выход :
Сложность времени: O (n log n)
Вспомогательное пространство: O (1)
Эффективное решение этого подхода состоит в том, чтобы использовать хеширование. Мы храним все элементы arr1 [] и их количество в хеш-таблице. Затем мы просматриваем arr2 [] и проверяем, совпадает ли число каждого элемента в arr2 [] с количеством в arr1 [].
Ниже приведена реализация вышеуказанной идеи. Мы используем unordered_map для хранения счетчиков.
using namespace std;
// Возвращает true, если arr1 [0..n-1] и arr2 [0..m-1]
// содержат одинаковые элементы.
Определить и сообщить пользователю о том, сумма какой половины массива больше: левой или правой
Помощь в написании контрольных, курсовых и дипломных работ здесь.
94731 / 64177 / 26122 Ответы с готовыми решениями: Определить, что больше: максимальный элемент левой половины или минимальный элемент правой половины матрицы
Определить что больше максимальный элемент левой половины или минимальный элемент правой половины.
Для матрицы A определить, в какой из ее половин (левой или правой) больше нулевых элементов
Для матрицы A (5 строк, 4 столбца) определить, в какой из ее половин (левой или правой) больше.
Столбцы левой половины массива поменять местами со столбцами правой половины
1. Дан двумерный массив из четного числа столбцов. Столбцы левой половины массива поменять местами.
Столбцы левой половины массива поменять местами со столбцами правой половины
Дан двумерный массив из четного числа столбцов. Столбцы левой половины массива поменять местами со.
Найти порядковый номер числа в масиве, в котором сумма элементов справа равна сумме элементов слева
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Лучшие ответы ( 2 ) 94731 / 64177 / 26122 Ответы с готовыми решениями:Найти первый столбец матрницы, сумма элементов которого равна сумме элементов первой строки
Дана матрица А. Найти первый столбец, сумма элементов которого равна сумме элементов первой строки.
Найти в массиве число такое, что сумма элементов до него была равна сумме элементов после него
Помогите написать программу: Есть массив от 1 до 30.Найти в массиве такое число, чтоб сумма.
Найти строки матрицы, где есть эл-т для которого сумма предшествующих равна сумме следующих за ним элементов
Доброго времени суток всем. Прошу помочь с этими заданиям, написать код в c++ 2. Вывести строки.
Для сбалансированного дерева найти уровень, на котором сумма элементов равна заданному числу М.
Добрый день! Помогите пожалуйста с решением данной задачи: Задание: Создать объект – дерево.
geekbrains / src / main / java / ru / tkachenko / dmitry / geekbrains / java1 / dz2 / Dz2.java /
Code definitions
Code navigation index up-to-date
- Go to file T
- Go to line L
- Go to definition R
- Copy path
- Copy permalink
Cannot retrieve contributors at this time
194 lines (164 sloc) 5.8 KB
package ru.tkachenko.dmitry.geekbrains.java1.dz2 ; |
/** |
* Created by dmitry tkachenko on 28.01.2017. |
*/ |
public class Dz2 |
/** |
* Task 1 |
* |
* Задать целочисленный массив, состоящий из элементов 0 и 1. |
* Например: [ 1, 1, 0, 0, 1, 0, 1, 1, 0, 0 ]. |
* С помощью цикла и условия заменить 0 на 1, 1 на 0; |
*/ |
static int [] replaceArrayValues ( int [] array ) |
int arrayLength = array . length; |
for ( int i = 0 ; i < arrayLength; i ++ ) |
array[i] = (array[i] > 0 ) ? 0 : 1 ; |
> |
return array; |
> |
/** |
* Task 2 |
* < p > |
* Задать пустой целочисленный массив размером 8. |
* С помощью цикла заполнить его значениями 0 3 6 9 12 15 18 21; |
*/ |
static int [] fillArray ( int [] array ) |
int length = array . length; |
for ( int i = 0 ; i < length; i ++ ) |
array[i] = i * 3 ; |
> |
return array; |
> |
/** |
* Task 3 |
* < p > |
* Задать массив [ 1, 5, 3, 2, 11, 4, 5, 2, 4, 8, 9, 1 ] |
* пройти по нему циклом, и числа меньшие 6 умножить на 2; |
*/ |
static int [] multiplyLess6 ( int [] array ) |
int length = array . length; |
int tmp; |
for ( int i = 0 ; i < length; i ++ ) |
tmp = array[i]; |
array[i] = tmp < 6 ? tmp * 2 : tmp; |
> |
return array; |
> |
/** |
* Task 4 |
* < p > |
* Создать квадратный двумерный целочисленный массив (количество строк и столбцов |
* одинаковое), и с помощью цикла(-ов) заполнить его диагональные элементы единицами; |
*/ |
static int [][] fillDiagonalArray ( int [][] array ) |
int length = array . length; |
int firstItem; |
int lastItem; |
int firstArray; |
int lastArray; |
for ( int i = 0 ; i < length; i ++ ) |
firstItem = i; |
lastItem = length - i - 1 ; |
firstArray = array[i][firstItem]; |
lastArray = array[i][lastItem]; |
if (firstArray != 1 && lastArray != 1 ) |
array[i][firstItem] = 1 ; |
array[i][lastItem] = 1 ; |
> |
> |
return array; |
> |
/** |
* Task 5 |
* < p > |
* Задать одномерный массив и найти в нем минимальный и максимальный |
* элементы (без помощи интернета); |
*/ |
static int [] minMax ( int [] array ) |
int min = 0 ; |
int max = 0 ; |
for ( int item : array) |
if (item < min) min = item; |
if (item > max) max = item; |
> |
return new int []; |
> |
/** |
* Task 6 |
* < p > |
* Написать метод, в который передается не пустой одномерный целочисленный массив, |
* метод должен вернуть true если в массиве есть место, в котором сумма левой и правой части |
* массива равны. Примеры: checkBalance([1, 1, 1, || 2, 1]) → true, checkBalance |
* ([2, 1, 1, 2, 1]) → false, checkBalance ([10, || 10]) → true, |
* граница показана символами ||, эти символы в массив не входят |
*/ |
static boolean checkBalance ( int [] array ) |
int length = array . length; |
int leftSum; |
int rightSum; |
for ( int i = 0 ; i < length - 1 ; i ++ ) |
leftSum = 0 ; |
rightSum = 0 ; |
for ( int j = 0 ; j <= i; j ++ ) |
leftSum += array[j]; |
> |
for ( int k = i + 1 ; k < length; k ++ ) |
rightSum += array[k]; |
> |
if (leftSum == rightSum) return true ; |
> |
return false ; |
> |
/** |
* Task 7 |
* < p > |
* Написать метод, которому на вход подается одномерный массив и число n (может быть |
* положительным, или отрицательным), при этом метод должен сместить все элементы |
* массива на n позиций. Для усложнения задачи нельзя пользоваться вспомогательными |
* массивами. |
*/ |
static int [] arrayNOffset ( int [] array , int n ) |
if (n < 0 ) |
negativeArrayNOffset(array, n); |
> else |
positiveArrayNOffset(array, n); |
> |
return array; |
> |
private static int [] negativeArrayNOffset ( int [] array , int n ) |
int length = array . length; |
int current; |
int next; |
n *= - 1 ; |
for ( int i = 0 ; i < n; i ++ ) |
for ( int k = 0 ; k < length - 1 ; k ++ ) |
current = array[k]; |
next = k + 1 ; |
if (k + 1 > length - 1 ) |
next = 0 ; |
> |
array[k] = array[next]; |
array[next] = current; |
> |
> |
return array; |
> |
private static int [] positiveArrayNOffset ( int [] array , int n ) |
int length = array . length - 1 ; |
int current; |
int prev; |
for ( int i = 0 ; i < n; i ++ ) |
for ( int k = length; 0 <= k; k -- ) |
current = array[k]; |
prev = k - 1 ; |
if (k - 1 < 0 ) |
prev = 0 ; |
> |
array[k] = array[prev]; |
array[prev] = current; |
> |
> |
return array; |
> |
> |
- Copy lines
- Copy permalink
- © 2021 GitHub, Inc.
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Проверьте, равна ли сумма левой части массива правой стороне массива в o (n)
Мне был задан массив чисел (integer), и мне нужно вернуть элемент, если сумма чисел в его правой части равна сумме чисел в его левом размере в o (n).
Например, массив программа должна печатать 9, потому что 1 + 2 + 2 = 5 и 3 + 2 = 5
Я прикрепил свой код, но не о (n) сложности. ценю вашу помощь.
Начнем с наблюдения, что для каждого i
Вычислить arrayTotal в первом проходе; затем пройдите по массиву слева, вычисляя частичную сумму. Остановитесь, как только вы достигнете позиции, где
Поиск трех элементов в массиве, сумма которого ближе всего к заданному числу
Учитывая массив целых чисел, A 1, A 2. A n, включая отрицательные и положительные, и другой integer S. Теперь нам нужно найти три различных целых числа в массиве, сумма которых ближе всего к данному целому S. Если существует более одного решения, любой из них в порядке.
Вы можете предположить, что все целые числа находятся в пределах диапазона int32_t, и при вычислении суммы не произойдет арифметического переполнения. S - ничего особенного, кроме случайного числа.
Есть ли какой-либо эффективный алгоритм, кроме поиска грубой силы, для поиска трех целых чисел?
Есть ли какой-либо эффективный алгоритм, кроме поиска грубой силы, для поиска трех целых чисел?
Да; мы можем решить это в O (n 2 ) времени! Во-первых, подумайте, что ваша проблема P может быть выражена эквивалентно несколько иначе, что устраняет необходимость в "целевом значении":
исходная задача P : Учитывая массив A из n целых чисел и целевое значение S , существует ли 3-кортеж из A , который суммируется с S ?
измененная проблема P' : Учитывая массив A из n целых чисел, существует ли 3-кортеж из A , который суммируется с нулем?
Обратите внимание, что вы можете перейти из этой версии проблемы P' из P путем вычитания вашего S/3 из каждого элемента в A , но теперь вам больше не нужно целевое значение.
Ясно, что если мы просто проверим все возможные 3-кортежи, мы бы решили проблему в O (n 3 ) - что базовая линия грубой силы. Можно ли сделать лучше? Что, если мы будем выбирать кортежи несколько более умным способом?
Во-первых, мы вкладываем некоторое время на сортировку массива, что требует от нас первоначального штрафа за O (n log n). Теперь мы выполняем этот алгоритм:
Этот алгоритм работает путем размещения трех указателей, i , j и k в разных точках массива. i начинается с самого начала и медленно работает до конца. k указывает на самый последний элемент. j указывает на начало i . Мы итеративно пытаемся суммировать элементы по их соответствующим индексам, и каждый раз происходит одно из следующего:
- Сумма точно верна! Мы нашли ответ.
- Сумма была слишком мала. Переместите j ближе к концу, чтобы выбрать следующий самый большой номер.
- Сумма была слишком большой. Переместите k ближе к началу, чтобы выбрать следующее наименьшее число.
Для каждого i указатели j и k будут постепенно приближаться друг к другу. В конце концов они передадут друг другу, и в этот момент нам не нужно ничего пробовать для этого i , так как мы будем суммировать одни и те же элементы только в другом порядке. После этого мы попробуем следующий i и повторим.
В конце концов, мы либо исчерпаем полезные возможности, либо найдем решение. Вы можете видеть, что это O (n 2 ), так как мы выполняем внешний цикл O (n) раз, и мы выполняем внутренний цикл O (n) раз. Можно сделать это субквадратично, если вы действительно любите, представляя каждое целое число как бит-вектор и выполняя быстрое преобразование Фурье, но выходящее за рамки этого ответа.
Примечание.. Поскольку это вопрос интервью, я немного обманул здесь: этот алгоритм позволяет выбирать один и тот же элемент несколько раз. То есть, (-1, -1, 2) будет правильным решением, как и (0, 0, 0). Он также находит только точные ответы, а не самый близкий ответ, как упоминается в названии. В качестве упражнения для читателя я дам вам понять, как заставить его работать только с отдельными элементами (но это очень простое изменение) и точные ответы (что также является простым изменением).
Если в массиве есть место в котором сумма левой и правой части массива равны
1 contributor
Users who have contributed to this file
127 lines (115 sloc) 4.81 KBpublic class Lesson3 |
public static void main ( String [] args ) |
int [] arr1 = < 1 , 1 , 0 , 0 , 1 , 0 , 1 , 1 , 0 , 0 >; // Array for task 1 |
int [] arr3 = < 1 , 5 , 3 , 2 , 11 , 4 , 5 , 2 , 4 , 8 , 9 , 1 >; // Array for task 3 |
int [] arr6 = < 1 , 5 , 3 , 2 , 11 , 4 , 5 , 2 , 4 , 8 , 9 , 1 >; // Array for task 6 |
int [] arr7 = < 1 , 1 , 2 , 2 >; // Array for task 7 |
System . out . println( " Task 1: " ); |
doTask1(arr1); // Task 1 check |
System . out . println( " \n Task 2: " ); |
doTask2( 100 ); // Task 2 check |
System . out . println( " \n Task 3: " ); |
doTask3(arr3); // Task 3 check |
System . out . println( " \n Task 4: " ); |
doTask4(); // Task 4 check |
System . out . println( " \n Task 5: " ); |
doTask5( 5 , 1 ); // Task 5 check |
System . out . println( " \n Task 6: " ); |
doTask6(arr6); // Task 6 check |
System . out . println( " \n Task 7: " ); |
System . out . println(doTask7(arr7)); // Task 7 check |
> |
// Заменить 0 на 1, 1 на 0; |
public static void doTask1 ( int [] arr ) |
for ( int i = 0 ; i < arr . length; i ++ ) |
if (arr[i] == 0 ) |
arr[i] = 1 ; |
> else |
arr[i] = 0 ; |
> |
System . out . print(arr[i] + " " ); |
> |
> |
// Заполнить массив значениями 1 2 3 4 5 6 7 8 … 100; |
public static void doTask2 ( int size ) |
int [] arr = new int [size]; |
for ( int i = 0 ; i < arr . length; i ++ ) |
arr[i] = i + 1 ; |
System . out . print(arr[i] + " " ); |
> |
> |
// Задать массив, пройти по нему циклом, и числа меньшие 6 умножить на 2 |
public static void doTask3 ( int [] arr ) |
for ( int i = 0 ; i < arr . length; i ++ ) |
if (arr[i] < 6 ) |
arr[i] = arr[i] * 2 ; |
> |
System . out . print(arr[i] + " " ); |
> |
> |
/* Создать квадратный двумерный целочисленный массив, и с помощью цикла заполнить его диагональные |
элементы единицами (можно только одну из диагоналей, если обе сложно). |
*/ |
public static void doTask4 () |
int [][] arr = |
< 1 , 2 , 3 >, |
< 4 , 5 , 6 >, |
< 7 , 8 , 9 >>; |
for ( int i = 0 ; i < 3 ; i ++ ) |
for ( int j = 0 ; j < 3 ; j ++ ) |
if (i == j) |
arr[i][j] = 1 ; |
> |
System . out . print(arr[i][j] + " " ); |
> |
System . out . println(); |
> |
> |
/* Написать метод, принимающий на вход два аргумента: len и initialValue, |
и возвращающий одномерный массив типа int длиной len, каждая ячейка которого |
равна initialValue; |
*/ |
public static void doTask5 ( int len , int initialValue ) |
int [] arr = new int [len]; |
for ( int i = 0 ; i < len; i ++ ) |
arr[i] = initialValue; |
System . out . print( " [ " + i + " ] " + arr[i] + " " ); |
> |
> |
// 6 * Задать одномерный массив и найти в нем минимальный и максимальный элементы |
public static void doTask6 ( int [] arr ) |
int max = arr[ 0 ]; |
int min = arr[ 0 ]; |
for ( int i = 0 ; i < arr . length; i ++ ) |
if (arr[i] > max) |
max = arr[i]; |
> |
> |
for ( int i = 0 ; i < arr . length; i ++ ) |
if (arr[i] < min) |
min = arr[i]; |
> |
> |
System . out . println(max); |
System . out . println(min); |
> |
/* 7 ** Написать метод, в который передается не пустой одномерный целочисленный массив, |
метод должен вернуть true, если в массиве есть место, в котором сумма левой и правой части массива равны. |
*/ |
public static boolean doTask7 ( int [] arr ) |
int rightSum = 0 ; |
int leftSum = 0 ; |
// Нахожу сумму всех элементов |
for ( int i = 0 ; i < arr . length; i ++ ) |
rightSum += arr[i]; |
> |
// Перебираю сумму с начала массива и сравниваю с разницей (правой частью) |
for ( int i = 0 ; i < arr . length; i ++ ) |
leftSum += arr[i]; |
if (leftSum == rightSum - leftSum) |
return true ; |
> |
> |
return false ; |
> |
> |
- Copy lines
- Copy permalink
- © 2021 GitHub, Inc.
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Если в массиве есть место в котором сумма левой и правой части массива равны
Switch branches/tags
Branches Tags
Could not load branches
Nothing to show
Could not load tags
Nothing to show
Если в массиве есть место в котором сумма левой и правой части массива равны
Aug 22nd, 2017
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
/// Написать метод, в который передается не пустой одномерный целочисленный массив,
// метод должен вернуть true если в массиве есть место, в котором сумма левой и правой части
// массива равны. Примеры: checkBalance([1, 1, 1, || 2, 1]) → true, checkBalance ([2, 1, 1, 2, 1]) →
// false, checkBalance ([10, || 10]) → true, граница показана символами ||, эти символы в массив не
RAW Paste Data
C++ | 32 min ago | 0.85 KB
MySQL | 34 min ago | 0.50 KB
C++ | 1 hour ago | 2.80 KB
Batch | 1 hour ago | 2.58 KB
C | 1 hour ago | 0.02 KB
C++ | 2 hours ago | 0.62 KB
PostgreSQL | 2 hours ago | 5.01 KB
Not a member of Pastebin yet?
Sign Up, it unlocks many cool features!
Найти элемент в массиве так, чтобы сумма левого массива была равна сумме правого массива
Дан массив размером n. Найдите элемент, который делит массив на два подмассива с равной суммой.
Примеры:
Способ 1 (простой)
Рассмотрим каждый элемент, начиная со второго элемента. Вычислить сумму элементов слева и сумму элементов справа. Если эти две суммы совпадают, верните элемент.
Метод 2 (Использование префиксных и суффиксных массивов:
using namespace std;
int findElement( int arr[], int n)
// Формирование массива префиксов из 0
for ( int i = 1; i < n; i++)
prefixSum[i] = prefixSum[i - 1] + arr[i];
// Формируем массив суффиксных сумм из n-1
suffixSum[n - 1] = arr[n - 1];
for ( int i = n - 2; i >= 0; i--)
suffixSum[i] = suffixSum[i + 1] + arr[i];
// Находим точку, где префикс и суффикс
for ( int i = 1; i < n - 1; i++)
if (prefixSum[i] == suffixSum[i])
int n = sizeof (arr) / sizeof (arr[0]);
cout << findElement(arr, n);
// Java-программа для поиска элемента
// такая, что сумма правого бокового элемента
// равно сумме левой стороны
public class GFG
// Находит элемент в массиве такой, что
// суммы слева и справа равны
static int findElement( int arr[], int n)
// Формирование массива префиксов из 0
int [] prefixSum = new int [n];
prefixSum[ 0 ] = arr[ 0 ];
for ( int i = 1 ; i < n; i++)
prefixSum[i] = prefixSum[i - 1 ] + arr[i];
// Формируем массив суффиксных сумм из n-1
int [] suffixSum = new int [n];
suffixSum[n - 1 ] = arr[n - 1 ];
for ( int i = n - 2 ; i >= 0 ; i--)
suffixSum[i] = suffixSum[i + 1 ] + arr[i];
// Находим точку, где префикс и суффикс
for ( int i = 1 ; i < n - 1 ; i++)
if (prefixSum[i] == suffixSum[i])
public static void main(String args[])
int n = arr.length;
>
// Этот код предоставлен Sumit Ghosh
def findElement(arr, n) :
prefixSum = [ 0 ] * n
prefixSum[ 0 ] = arr[ 0 ]
for i in range ( 1 , n) :
prefixSum[i] = prefixSum[i - 1 ] + arr[i]
suffixSum = [ 0 ] * n
suffixSum[n - 1 ] = arr[n - 1 ]
for i in range (n - 2 , - 1 , - 1 ) :
suffixSum[i] = suffixSum[i + 1 ] + arr[i]
for i in range ( 1 , n - 1 , 1 ) :
if prefixSum[i] = = suffixSum[i] :
if __name__ = = "__main__" :
arr = [ 1 , 4 , 2 , 5 ]
print (findElement(arr, n))
// Находит элемент в
// массив такой, что слева
static int findElement( int []arr,
// Формируем префиксную сумму
int [] prefixSum = new int [n];
for ( int i = 1; i < n; i++)
prefixSum[i] = prefixSum[i - 1] +
// Формируем сумму суффикса
int [] suffixSum = new int [n];
suffixSum[n - 1] = arr[n - 1];
for ( int i = n - 2; i >= 0; i--)
suffixSum[i] = suffixSum[i + 1] +
// Находим точку, где префикс
// и суффиксные суммы совпадают.
for ( int i = 1; i < n - 1; i++)
if (prefixSum[i] == suffixSum[i])
public static void Main()
int n = arr.Length;
// Этот код предоставлен anuj_67.
function findElement(& $arr , $n )
// Формирование массива префиксов из 0
$prefixSum = array_fill (0, $n , NULL);
$prefixSum [0] = $arr [0];
for ( $i = 1; $i < $n ; $i ++)
$prefixSum [ $i ] = $prefixSum [ $i - 1] +
// Формируем массив суффиксных сумм из n-1
$suffixSum = array_fill (0, $n , NULL);
$suffixSum [ $n - 1] = $arr [ $n - 1];
for ( $i = $n - 2; $i >= 0; $i --)
$suffixSum [ $i ] = $suffixSum [ $i + 1] +
// Находим точку, где префикс
// и суффиксные суммы совпадают.
for ( $i = 1; $i < $n - 1; $i ++)
if ( $prefixSum [ $i ] == $suffixSum [ $i ])
$arr = array ( 1, 4, 2, 5 );
echo findElement( $arr , $n );
// Этот код добавлен
// ChitraNayal
?>
Выход:
Метод 3 (Экономия пространства)
Мы вычисляем сумму всего массива, кроме первого элемента в right_sum, считая его элементом разбиения. Теперь мы пересекаем массив слева направо, вычитая элемент из right_sum и добавляя элемент в left_sum. Точка, где right_sum равна left_sum, мы получаем разделение.
Ниже приведена реализация:
using namespace std;
// Функция для вычисления раздела
int findElement( int arr[], int size)
int right_sum = 0, left_sum = 0;
for ( int i = 1; i < size; i++)
// Проверка точки разбиения
// т.е. left_Sum == right_sum
for ( int i = 0, j = 1; j < size; i++, j++)
if (left_sum == right_sum)
int size = sizeof (arr) / sizeof (arr[0]);
cout << findElement(arr, size);
// Java-программа для поиска элемента
// такая, что сумма правого бокового элемента
// равно сумме левой стороны
public class GFG
// Функция для вычисления раздела
static int findElement( int arr[], int size)
int right_sum = 0 , left_sum = 0 ;
for ( int i = 1 ; i < size; i++)
// Проверка точки разбиения
// т.е. left_Sum == right_sum
for ( int i = 0 , j = 1 ; j < size; i++, j++)
if (left_sum == right_sum)
public static void main(String args[])
int size = arr.length;
>
// Этот код предоставлен Sumit Ghosh
def findElement(arr, size) :
right_sum, left_sum = 0 , 0
for i in range ( 1 , size) :
if left_sum = = right_sum :
if __name__ = = "__main__" :
arr = [ 2 , 3 , 4 , 1 , 4 , 5 ]
print (findElement(arr, n))
// Функция для вычисления
static int findElement( int []arr,
int right_sum = 0,
for ( int i = 1; i < size; i++)
for ( int i = 0, j = 1;
if (left_sum == right_sum)
public static void Main()
int size = arr.Length;
// Этот код добавлен
// от anuj_67.
<?php
// Функция для вычисления раздела
function findElement(& $arr , $size )
for ( $i = 1; $i < $size ; $i ++)
$right_sum += $arr [ $i ];
// Проверка точки разбиения
// т.е. left_Sum == right_sum
$right_sum -= $arr [ $j ];
$left_sum += $arr [ $i ];
if ( $left_sum == $right_sum )
return $arr [ $i + 1];
$arr = array ( 2, 3, 4, 1, 4, 5 );
$size = sizeof( $arr );
echo findElement( $arr , $size );
// Этот код добавлен
// ChitraNayal
?>
Выход:
Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.
Читайте также: