博客
关于我
【python刷题】分治法
阅读量:474 次
发布时间:2019-03-06

本文共 1725 字,大约阅读时间需要 5 分钟。

归并排序是一种高效的排序算法,适用于大数据量的排序场景。其核心思想是将数组分成两部分,分别进行排序后再合并。以下是归并排序的实现代码以及对应的解释:

def merge(le, ri):    res = []    i = j = 0    while i < len(le) and j < len(ri):        if le[i] < ri[j]:            res.append(le[i])            i += 1        else:            res.append(ri[j])            j += 1    res += le[i:]    res += ri[j:]    return resdef mergeSort(nums):    if len(nums) <= 1:        return nums    mid = len(nums) // 2    left = mergeSort(nums[:mid])    right = mergeSort(nums[mid:])    return merge(left, right)nums = [6,2,1,5,4,3,2,2,7]res = mergeSort(nums)print(res)

代码解释:

  • merge函数:用于合并两个已经排序的数组,返回一个新的排序数组。
  • mergeSort函数:实现归并排序的主要函数,通过递归将数组分成两部分,分别排序后再合并。
  • 归并排序的时间复杂度为O(n log n),在实际应用中常用于大数据量的排序需求。


    LeetCode 241:为运算表达式设计优先级

    在这个问题中,我们需要设计一个运算表达式的优先级系统,支持加、减、乘运算。每个运算符的优先级决定了执行顺序。我们可以通过递归的方式来处理表达式,将其拆分为左边和右边部分,分别计算结果后再合并。

    递归思路:

  • 遍历字符串中的每个字符。
  • 当遇到运算符时,递归处理左边和右边的子表达式。
  • 根据运算符类型,分别计算左边和右边的结果,并将结果按照运算符优先级合并。
  • 代码解释:

    class Solution:    def diffWaysToCompute(self, input: str) -> List[int]:        res = []        n = len(input)        for i in range(n):            c = input[i]            if c in '+-*':                left = self.diffWaysToCompute(input[:i])                right = self.diffWaysToCompute(input[i+1:])                for a in left:                    for b in right:                        if c == '+':                            res.append(a + b)                        elif c == '-':                            res.append(a - b)                        elif c == '*':                            res.append(a * b)            else:                res.append(int(input))        return res

    代码功能:

  • 遍历输入字符串中的每个字符。
  • 当遇到运算符时,递归处理左边和右边的表达式。
  • 根据运算符类型,分别计算左边和右边的结果,并将结果合并。
  • 最后返回所有可能的计算结果。
  • 这个方案通过递归的方式处理表达式,确保了运算符的优先级,实现了表达式的正确计算。

    转载地址:http://wfpbz.baihongyu.com/

    你可能感兴趣的文章
    parallelStream导致LinkedList遍历时空指针的问题
    查看>>
    Parameter ‘password‘ not found. Available parameters are [md5String, param1, username, param2]
    查看>>
    ParameterizedThreadStart task
    查看>>
    paramiko模块
    查看>>
    param[:]=param-lr*param.grad/batch_size的理解
    查看>>
    Spring Cloud 之注册中心 EurekaServerAutoConfiguration源码分析
    查看>>
    ParseChat应用源码ios版
    查看>>
    Part 2异常和错误
    查看>>
    Pascal Script
    查看>>
    Spring Boot(七十六):集成Redisson实现布隆过滤器(Bloom Filter)
    查看>>
    passwd命令限制用户密码到期时间
    查看>>
    Spring @Async执行异步方法的简单使用
    查看>>
    PAT (Basic Level) Practice 乙级1041-1045
    查看>>
    PAT (Basic Level) Practise - 写出这个数
    查看>>
    PAT 1027 Colors in Mars
    查看>>
    PAT 1127 ZigZagging on a Tree[难]
    查看>>
    PAT 2-07. 素因子分解(20)
    查看>>
    SparkSQL学习03-数据读取与存储
    查看>>
    PAT L2-012. 关于堆的判断
    查看>>
    PAT Spell It Right [非常简单]
    查看>>