Нахождение подмассива с заданной суммой — распространенная проблема, которая часто возникает на собеседованиях по программированию и соревновательном программировании. Эту проблему можно решить с помощью различных методов, каждый из которых имеет свои собственные компромиссы относительно временной и пространственной сложности. В этой статье мы рассмотрим несколько подходов к решению проблемы поиска подмассива с заданной суммой в Java.
По заданному массиву целых чисел и целевой сумме найдите в массиве непрерывный подмассив, сумма которого равна заданной сумме. Проблему можно разделить на два основных варианта:
Давайте рассмотрим различные методы решения этих вариантов.
Подход грубой силы включает в себя проверку всех возможных подмассивов и вычисление их сумм, чтобы увидеть, равна ли какая-либо из них целевой сумме. Этот подход работает для обоих вариантов, но неэффективен для больших массивов из-за квадратичной временной сложности.
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Анализ
Подход со скользящим окном эффективен для массивов, содержащих только положительные числа. Этот метод предполагает сохранение окна элементов, сумма которых равна целевой сумме. Окно расширяется за счет добавления элементов до тех пор, пока сумма не превысит целевую, и сжимается за счет удаления элементов из начала до тех пор, пока сумма не станет меньше или равна целевой.
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Анализ
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3