分治算法 港控/mmm° 2022-12-12 04:58 307阅读 0赞 划分问题:整个问题划分成多个无关联的子问题。 递归求解:递归调用求解各个子问题。 合并问题:合并子问题的解,形成原始问题的解。 -------------------- 以[Leetcode][]数组的连续数列最大和例子为例: > 输入: \[-2,1,-3,4,-1,2,1,-5,4\] > 输出: 6 > 解释: 连续子数组 \[4,-1,2,1\] 的和最大,为 6。 -------------------- # 分治实现: # 分治思路: > nums = \[-2,1,-3,4,-1,2,1,-5,4\] 首先,将问题划分为多个无关的子问题,在这里将整个数组每次递归划分为两部分nums1和nums2,那么最大连续子序列和只有3种情况: > nums1 = \[-2,1,-3,4,-1\] > nums2 = \[2,1,-5,4\] 1、最大连续和子序列在nums1 2、最大连续和子序列在nums2 3、由nums1的后部分和nums2的前部分组成 -------------------- # 实现代码: # class Solution { public: int devide(vector<int>& nums, int left, int right) { if (left == right) { return nums[left]; } int mid = (left + right) / 2; int leftSum = devide(nums, left, mid); // 左边最大和 int rightSum = devide(nums, mid + 1, right); // 右边最大和 int sumLeft = 0, maxLeftSum = INT_MIN; for (int i = mid; i >= left; --i) { sumLeft += nums[i]; maxLeftSum = max(maxLeftSum, sumLeft); } int sumRight = 0, maxRightSum = INT_MIN; for (int i = mid + 1; i <= right; ++i) { sumRight += nums[i]; maxRightSum = max(maxRightSum, sumRight); } return max(max(leftSum, rightSum), maxRightSum + maxLeftSum); // 情况3是maxRightSum + maxLeftSum的和 } int maxSubArray(vector<int>& nums) { int left = 0; int right = nums.size() - 1; return devide(nums, left, right); } }; [Leetcode]: https://leetcode-cn.com/problems/contiguous-sequence-lcci/
相关 算法-分治算法 一、分治 1、定义:分治,也就是分而治之。 它的一般步骤是: ① 将原问题分解成若干个规模较小的子问题(子问题和原问题的结构一样,只是规模不一样) 妖狐艹你老母/ 2024年04月08日 10:08/ 0 赞/ 228 阅读
相关 分治算法 问题描述 在一个2k×2k 个方格组成的棋盘中,恰有一个方格与其它方格不同,称该方格为一特殊方格,且称该棋盘为一特殊棋盘。在棋盘覆盖问题中,要用图示的L型骨牌覆盖给定的特 约定不等于承诺〃/ 2024年02月17日 21:39/ 0 赞/ 207 阅读
相关 分治算法 思想:将原问题划分成n个规模较小,并且与原问题相似的子问题。递归解决子问题,然后合并结果 要求: 1)原问题与分解成的小问题具有相同的模式 2)小问题可以独立求解 柔情只为你懂/ 2023年06月23日 02:59/ 0 赞/ 27 阅读
相关 分治算法 [概述参考博客地址][Link 1] [算法笔记总目录][Link 2] 一、分治算法的设计思想: 1. 分–将问题分解为规模更小的子问题; 2. 治–将这些规 迈不过友情╰/ 2023年02月18日 01:52/ 0 赞/ 147 阅读
相关 分治算法 划分问题:整个问题划分成多个无关联的子问题。 递归求解:递归调用求解各个子问题。 合并问题:合并子问题的解,形成原始问题的解。 ------------------- 港控/mmm°/ 2022年12月12日 04:58/ 0 赞/ 308 阅读
相关 算法-->分治 package 分治算法; import java.util.Scanner; public class fenzhi \{ static final int MAXN 一时失言乱红尘/ 2022年06月12日 02:06/ 0 赞/ 356 阅读
相关 分治算法 分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原问题的解。即一种分目标完成程序算法,简单问题 柔光的暖阳◎/ 2022年06月05日 06:06/ 0 赞/ 315 阅读
相关 分治算法 分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原问题的解。即一种分目标完成程序算法,简单问题 港控/mmm°/ 2022年06月03日 02:19/ 0 赞/ 327 阅读
相关 分治算法 可能我太菜了 ,众多题解 的t0\t0 +t1\t2\2始终没看懂 分治大模拟好! include<bits/stdc++.h> using nam 妖狐艹你老母/ 2021年10月24日 00:20/ 0 赞/ 509 阅读
相关 分治算法 一 分治算法介绍 1 分治法是一种很重要的算法 字面上的解释是“分而治之,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……,直 冷不防/ 2021年07月24日 21:35/ 0 赞/ 602 阅读
还没有评论,来说两句吧...