当前位置: 代码迷 >> 综合 >> LeetCode 01:回溯思想 (给定一个由若干 0 和 1 组成的数组 A,我们最多可以将 K 个值从 0 变成 1 , 返回仅包含 1 的最长(连续)子数组的长度)
  详细解决方案

LeetCode 01:回溯思想 (给定一个由若干 0 和 1 组成的数组 A,我们最多可以将 K 个值从 0 变成 1 , 返回仅包含 1 的最长(连续)子数组的长度)

热度:69   发布时间:2023-10-20 02:53:38.0
package leetcode;/*** @description:** 给定一个由若干 0 和 1 组成的数组 A,我们最多可以将 K 个值从 0 变成 1 * 返回仅包含 1 的最长(连续)子数组的长度* * 输入:A = [1,1,1,0,0,0,1,1,1,1,0], K = 2* 输出:6** 解释:* [1,1,1,0,0,1,1,1,1,1,1]* 粗体数字从 0 翻转到 1,最长的子数组长度为 6。** @author: xch* @time: 2021/2/19 14:09*/
public class day01 {public static int max=0;public static void main(String[] args) {int[] arr = {0,1,1,1,0,0,1,0,1,0,1};test(arr, 0, 2);System.out.println(max);}public static void test(int[] array, int index, int k) {if (index == array.length || k == 0) {int len = 0;for (int i = 0; i < array.length; i++) {if (array[i] == 1) {len ++;max = Math.max(len, max);} else {len = 0;}}}//回溯思想 把改变的元素再修改回来,再重新尝试, 结点(index)在改变for (int j = 0; j < array.length; j++) {if (array[j] == 0) {array[j] = 1;test(array, index + 1, k - 1);array[j] = 0;}}}
}