美文网首页
算法设计思想-分而治之

算法设计思想-分而治之

作者: sweetBoy_9126 | 来源:发表于2021-12-09 09:58 被阅读0次

1. 是什么

  • 算法设计中的一种方法。
  • 将一个问题成多个和原问题相似的小问题,递归解决小问题,再将结果并以解决原来的问题。

2. 场景

2.1. 归并排序

  • 分:把数组从中间一分为二。
  • 解:递归地对两个子数组进行归并排序。
  • 合:合并有序子数组。

2.2. 快速排序

  • 分:选基准,按基准把数组分成两个子数组。
  • 解:递归地对两个子数组进行快速排序。
  • 合:对两个子数组进行合并。

2.3. 猜数字大小 leetCode 374

var guessNumber = function(n) {
    const rec = (low, high) => {
        if (low > high) return
        const mid = Math.floor((low + high) /2);
        const res = guess(mid);
        if (res === 0) {
            return mid;
        } else if (res === -1) {
            return rec(low, mid - 1)
        } else {
            return rec(mid + 1, high)
        }
    }
    return rec(1, n)
};

时间复杂度和空间复杂度都是 O(logn)

2.4. 翻转二叉树 leetCode 226

var invertTree = function(root) {
    if (!root) return null;
    return {
        val: root.val,
        left: invertTree(root.right),
        right: invertTree(root.left),
    }
};

时间复杂度和空间复杂度都是 O(n)

2.5. 相同的树 leetCode 100

给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验
这两棵树是否相同。

如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。

var isSameTree = function(p, q) {

    if (!p && !q) return true;
    if (p && q && p.val === q.val && 
        isSameTree(p.left, q.left) &&
        isSameTree(p.right, q.right)
    ) {
        return true
    }
    return false
};

2.6. 对称二叉树 leetCode 101

给定一个二叉树,检查它是否是镜像对称的。
例如,二叉树 [1,2,2,3,4,4,3] 是对称的。

    1
   / \
  2   2
 / \ / \
3  4 4  3
var isSymmetric = function(root) {
    if(!root) return true
    const rec = (left,right) => {
        if (!left && !right) return true;
        if (
            left && right && left.val === right.val &&
            rec(left.left, right.right) &&
            rec(left.right, right.left)
        ) {
            return true
        } else {
            return false
        }
    }
    return rec(root.left, root.right)
};

相关文章

  • 算法设计思想-分而治之

    1. 是什么 算法设计中的一种方法。 将一个问题分成多个和原问题相似的小问题,递归解决小问题,再将结果合并以解决原...

  • 10.算法设计思想之"分而治之"

    时间复杂度 O(logN) && 空间复杂度 O(n) LeeCode:226.翻转二叉树 时间复杂度 O(n) ...

  • 分治思想之排序算法

    分而治之是设计高效算法的一个重要思想。本文主要总结一下分治思想在排序算法中的运用。 排序在商业数据处理和现代科学计...

  • 经典算法思想1-分治算法

    分而治之,分治算法(divide and conquer),是计算机科学中非常重要的算法之一。该算法的核心思想可概...

  • 分治算法

    如何理解分治算法? 分治算法(divide and conquer)的核心思想其实就是四个字,分而治之,也就是将原...

  • 分而治之思想

    当一个问题的规模很大时,直接求解往往比较困难。对于这类问题,很大一部分是可以采取分而治之的思想来处理的。 分治法是...

  • 《数据结构与算法之美》32——分治算法

    如何理解分治算法 分治算法(divide and conquer)的核心思想就四个字:分而治之,就是将原问题划分成...

  • 排序算法(七)快速排序

    排序算法(七)快速排序 1.算法思路  快速排序(Quick-Sort)是从冒泡排序演变而来及基于分而治之思想的排...

  • 分而治之算法

    一.原理: 1. 分治算法的基本思想就是:将一个规模为N的问题分解为K个规模较小的子问题(K <= N),这些子问...

  • 分治算法

    理解分治算法 分而治之

网友评论

      本文标题:算法设计思想-分而治之

      本文链接:https://www.haomeiwen.com/subject/ulitfrtx.html