«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Подмассив с заданной суммой в Java с разными подходами

Подмассив с заданной суммой в Java с разными подходами

Опубликовано 6 ноября 2024 г.
Просматривать:807

Subarray with given sum in Java with different approaches

Нахождение подмассива с заданной суммой — распространенная проблема, которая часто возникает на собеседованиях по программированию и соревновательном программировании. Эту проблему можно решить с помощью различных методов, каждый из которых имеет свои собственные компромиссы относительно временной и пространственной сложности. В этой статье мы рассмотрим несколько подходов к решению проблемы поиска подмассива с заданной суммой в Java.

Постановка задачи

По заданному массиву целых чисел и целевой сумме найдите в массиве непрерывный подмассив, сумма которого равна заданной сумме. Проблему можно разделить на два основных варианта:

  1. Подмассив с положительными числами: массив содержит только положительные числа.
  2. Подмассив со смешанными числами: массив содержит как положительные, так и отрицательные числа.

Давайте рассмотрим различные методы решения этих вариантов.

Подход 1: использование грубой силы

Подход грубой силы включает в себя проверку всех возможных подмассивов и вычисление их сумм, чтобы увидеть, равна ли какая-либо из них целевой сумме. Этот подход работает для обоих вариантов, но неэффективен для больших массивов из-за квадратичной временной сложности.

Выполнение

public class SubarraySumBruteForce {
  public static int[] findSubarrayWithGivenSum(int[] arr, int targetSum) {
    int n = arr.length;
    for (int start = 0; start 

Выход

Subarray found from index 1 to 3

Анализ

  • Временная сложность: O(n²) из-за двух вложенных циклов, перебирающих массив.
  • Пространственная сложность: O(1), поскольку дополнительное пространство за пределами входного массива не используется.

Подход 2: использование скользящего окна

Подход со скользящим окном эффективен для массивов, содержащих только положительные числа. Этот метод предполагает сохранение окна элементов, сумма которых равна целевой сумме. Окно расширяется за счет добавления элементов до тех пор, пока сумма не превысит целевую, и сжимается за счет удаления элементов из начала до тех пор, пока сумма не станет меньше или равна целевой.

Выполнение

public class SubarraySumSlidingWindow {
  public static int[] findSubarrayWithGivenSum(int[] arr, int targetSum) {
    int start = 0;
    int currentSum = 0;

    for (int end = 0; end  targetSum && start 

Выход

Subarray found from index 1 to 3

Анализ

  • Временная сложность: O(n), поскольку каждый элемент обрабатывается не более двух раз.
  • Пространственная сложность: O(1), поскольку дополнительное пространство не требуется.
Заявление о выпуске Эта статья воспроизведена по адресу: https://www.tutorialspoint.com/subarray-with-given-sum-in-java-with-dependent-approaches. Если есть какие-либо нарушения, свяжитесь с [email protected], чтобы удалить их.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3