动态规划和分治法的区别
动态规划也是一种分治思想(比如其状态转移方程就是一种分治),但与分治算法不同的是,分治算法是把原问题分解为若干个子问题,自顶向下求解子问题,合并子问题的解,从而得到原问题的解。动态规划也是把原始问题分解为若干个子问题,然后自底向上,先求解最小的子问题,把结果存在表格中,在求解大的子问题时,直接从表格中查询小的子问题的解,避免重复计算,从而提高算法效率。

=================================
分治法解题思路:

  1. 定义基本情况。
  2. 将问题分解为子问题并递归地解决它们。
  3. 合并子问题的解以获得原始问题的解。
    =========================

    题目合集:

    • 题目1:连续子数组之和
    • 题目2:逆序对

题目1:连续子数组之和

给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
示例:
输入: [-2,1,-3,4,-1,2,1,-5,4],
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
在此题的情况下:

1.取数组中心点为p,最大的连续子数组要么在p的左边,要么在p的右边,要么穿过p,一共有三种基本情况。

2.p左边的数组再取中心点,求最大子数组和
p右边的数组再取中心点,求最大子数组和

3.合并最大的子数组和

=================================

代码:

class Solution:def cross_sum(self, nums, left, right, p): if left == right:return nums[left]left_subsum = float('-inf')curr_sum = 0for i in range(p, left - 1, -1):curr_sum += nums[i]left_subsum = max(left_subsum, curr_sum)right_subsum = float('-inf')curr_sum = 0for i in range(p + 1, right + 1):curr_sum += nums[i]right_subsum = max(right_subsum, curr_sum)return left_subsum + right_subsum   def helper(self, nums, left, right): if left == right:return nums[left]p = (left + right) // 2left_sum = self.helper(nums, left, p)right_sum = self.helper(nums, p + 1, right)cross_sum = self.cross_sum(nums, left, right, p)return max(left_sum, right_sum, cross_sum)def maxSubArray(self, nums):return self.helper(nums, 0, len(nums) - 1)

题目2:逆序对

在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。
题解:归并排序:

如果将数组1【2,3,4,5】与数组2【1,5,6,8】合并,数组1在数组2之前。首先合并2与1中的最小值1。由于2比1大,数组1中的所有数都比1大且都能构成逆序对,逆序对总数加4,以此类推。

class Solution:def mergeSort(self, nums, tmp, l, r):if l >= r:return 0mid = (l + r) // 2inv_count = self.mergeSort(nums, tmp, l, mid) + self.mergeSort(nums, tmp, mid + 1, r)i, j, pos = l, mid + 1, lwhile i <= mid and j <= r:if nums[i] <= nums[j]:tmp[pos] = nums[i]i += 1inv_count += (j - (mid + 1))else:tmp[pos] = nums[j]j += 1pos += 1for k in range(i, mid + 1):tmp[pos] = nums[k]inv_count += (j - (mid + 1))pos += 1for k in range(j, r + 1):tmp[pos] = nums[k]pos += 1nums[l:r+1] = tmp[l:r+1]return inv_countdef reversePairs(self, nums: List[int]) -> int:n = len(nums)tmp = [0] * nreturn self.mergeSort(nums, tmp, 0, n - 1)

珍宝鸭的力扣练习(7):分治法题目合集相关推荐

  1. 20210325:力扣递归,回溯类型题目合集

    力扣递归,回溯类型题目合集 题目 思路与算法 代码实现 写在最后 题目 子集 2. 90. 子集 II 3. 40. 组合总和 II 4. 22. 括号生成 思路与算法 子集:注释的很详细,递归生成子 ...

  2. 珍宝鸭的力扣练习(3):位运算合集

    题目合集: 题目1: 二进制中1的个数 题目2:只出现一次的数(别的2次) 题目3:2个只出现一次的数(别的2次) 题目3: 只出现一次的数(别的3次) 题目1: 二进制中1的个数 请实现一个函数,输 ...

  3. 珍宝鸭的力扣练习(8):贪心算法练习合集

    1.贪心算法适用的问题 贪心策略适用的前提是:局部最优策略能导致产生全局最优解. 实际上,贪心算法适用的情况很少.一般,对一个问题分析是否适用于贪心算法,可以先选择该问题下的几个实际数据进行分析,就可 ...

  4. 珍宝鸭的力扣练习(1):字符串特殊方法合集

    例题合集: 方法1:KMP算法 题目1:字符串出现的第一个位置 方法2:字典序的利用 题目2:去除重复字母 方法1:KMP算法 题目1:字符串出现的第一个位置 给定一个 haystack 字符串和一个 ...

  5. 珍宝鸭的力扣练习(14):栈操作合集

    通用方法:辅助栈 考虑借用一个辅助栈 stack ,模拟 压入 / 弹出操作的排列.根据是否模拟成功,即可得到结果. 题目合集: 题目1:栈的压入.弹出序列 题目2: 双栈实现队列 ) 题目1:栈的压 ...

  6. 珍宝鸭的力扣练习(11):基本数学问题

    题型: 题型1:特殊数字 题目1:质数统计 题目2:丑数统计 题型2:设计公式 题目1:设计整数次方 题目2:设计1+2+...+n 题型3:统计类 题目1:统计1的个数 题目2:数字序列 题型1:特 ...

  7. 珍宝鸭的力扣练习(10):数组特殊方法合集

    题目合集: 方法1:二分法 例题1:不在排序数组内的数字 例题2:target开始与结束位置 例题3:旋转数组的最小值 例题4:排序数组中target的个数 方法2:摩尔投票法 例题1:不在数组内的数 ...

  8. 珍宝鸭的力扣练习(2):指针法的解题合集

    题目合集: 题目1:水桶最短板 题目2:目标值寻找 题目3:2数组合并 题目4:第一个不重复的数字 题目5:和为s的两个数字 题目6:倒序打印 快慢指针 题目1:调整数组顺序使奇数位于偶数前面 #双指 ...

  9. 珍宝鸭的力扣练习(6):呱唧的链表操作合集

    题目目录: 链表题: 题目1:列表合并 题目2:反转列表 题目3:删除元素 题目4:链表截取最后几个 题目5:链表相交的节点(双指针法) 题目5:环形链表(双指针法--快慢型) 题目5:反转链表(穿针 ...

最新文章

  1. perl 分析mysql binlog
  2. 树莓派进阶之路 (009) - 树莓派ftp脚本(原创)
  3. rust(43)-rust语言特点与版本发布
  4. 《MySQL必知必会》所有SQL语句图表集合(可作为查询表使用)---已完结
  5. html浮动炫酷样式,jQuery和CSS3炫酷表单浮动标签特效
  6. MongoDB工具最新进展
  7. (65)DDR工作效率?
  8. css3价格斜切_HTML5+CSS3价格表翻转切换动画
  9. std::nothrow
  10. Generate a Simulator Build command
  11. 拉取ftp服务器上的文件_无公网IP环境下搭建外部访问FTP文件共享服务器
  12. 关于websocket兼容IE版本
  13. C#调用Outlook发送邮件
  14. 微信提现(商户向商家转账)
  15. 【电力电子技术DC-AC】三相SPWM逆变器Simulink仿真(设置死区时间)
  16. 亿图图示EDraw Max,云的跨端思维导图
  17. 【VUE实战问题记录】Vue 父组件调用子组件的使用方法
  18. AlphaGo 的算法和技术分析
  19. INTP型人格的性格缺陷和心理问题分析
  20. PMSM矢量控制笔记(1.2)——隐机电机与凸极电机的详细区别

热门文章

  1. MacOS苹果电脑各种常见音频问题集锦
  2. 计算机音乐谱大全往后余生,往后余生简谱-马良-往后余生,有你有我
  3. android抖音切换实现,【Android 进阶】仿抖音系列之视频预览和录制(五)
  4. 无盘服务器玩游戏卡屏,电脑玩游戏卡屏怎么办 电脑玩游戏卡屏的解决方法
  5. 前端面试题总结:模拟面试
  6. 和时间恋爱,我喜欢她的微笑
  7. js 万历年五行纳音算法
  8. 蚊子的眼泪[凄美故事]
  9. excel分类汇总的使用
  10. django模板中for语句同时遍历两个列表