所谓分治就是把整个问题分成无关紧要的小问题
执行步骤:
- 划分问题:整个问题划分成多个无关联的子问题。
- 递归求解:递归调用求解各个子问题。
- 合并问题:合并子问题的解,形成原始问题的解
169.求众数
给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。
你可以假设数组是非空的,并且给定的数组总是存在众数。
-
示例 1:
输入: [3,2,3]
输出: 3 -
示例 2:
输入: [2,2,1,1,1,2,2]
输出: 2 -
代码
class Solution(object):
def majorityElement(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
nums.sort()
return nums[len(nums)//2]
240.搜索二维矩阵
编写一个高效的算法来搜索m x n矩阵matrix中的一个目标值target。该矩阵具有以下特性:每行的元素从左到右升序排列,每列的元素从上到下升序排列。
-
示例:
[
[1, 4, 7, 11, 15],
[2, 5, 8, 12, 19],
[3, 6, 9, 16, 22],
[10, 13, 14, 17, 24],
[18, 21, 23, 26, 30]
]
给定target = 5,返回 true。
给定 target = 20,返回 false。 -
思路:
从左下角到右上角依次探查,大于目标值则向上移动,小于目标值则向右移动,分治的思想就是每个列表是无关的,可以分别搜索。 -
代码:
class Solution:
def searchMatrix(self, matrix, target):
if not matrix: return False # 为空返回false
row, col, width = len(matrix) - 1, 0, len(matrix[0])
while row >= 0 and col < width:
if matrix[row][col] == target: # 找到 返回true
return True
elif matrix[row][col] > target:
row = row - 1 # 进入上一行
else:
col = col + 1 # 进行右一列
return False # 没找到 返回false
本文深入解析了分治算法的基本概念,通过两个实例——求众数和搜索二维矩阵,阐述了分治算法的执行步骤和应用。分治算法将复杂问题分解为若干个独立的子问题,递归求解后再合并子问题的解,从而高效解决原问题。
2万+

被折叠的 条评论
为什么被折叠?



