美文网首页
分治算法基础

分治算法基础

作者: 鱿鱼炸酱面 | 来源:发表于2021-09-19 14:38 被阅读0次
应用场景

一个问题可以分解为若干个规模较小的相同问题,且各个子问题是相互独立的,且解决子问题后就可以解决这个问题,这样的情况可以使用分治思维。

递归二分查找
static int binSearch(int[] arrays, int target, int low, int high) {
        if (low == high) {
            return target == arrays[low] ? low : -1;
        }
        int binIndex = (low + high) / 2;
        if (arrays[binIndex] < target) {
            return binSearch(arrays, target, binIndex + 1, arrays.length - 1);
        } else if ((arrays[binIndex] > target)) {
            return binSearch(arrays, target, 0, binIndex);
        } else return binIndex;
    }
非递归二分查找
static int binSearch(int[] array, int left, int right, int target) {
        // 如果上边界大于等于下边界
        while (left <= right) {
            // 求出二分后的中间索引
            int halfIndex = (right + left) / 2;
            // 中间值等于目标值,直接返回索引
            if (array[halfIndex] == target) {
                return halfIndex;
            }
            // 目标值小于中间值,上边界改为中间索引-1
            else if (target < array[halfIndex]) {
                right = halfIndex - 1;
            }
            // 目标值大于中间值,下边界改为中间索引+1
            else if (target > array[halfIndex]) {
                left = halfIndex + 1;
            }
        }
        return -1;
    }
归并排序
public static int[] mergeSort(int[] array) {
    if (array.length <= 1) {
        return array;
    }
    // 拆分数组
    int binIndex = array.length / 2;
    int[] left = Arrays.copyOfRange(array, 0, binIndex);
    int[] right = Arrays.copyOfRange(array, binIndex, array.length);
    // 分解+合并
    return merge(mergeSort(left), mergeSort(right));
}

public static int[] merge(int[] left, int[] right) {
    int l = 0, r = 0; // 代表左右连个数组的指针
    int[] mergeArray = new int[left.length + right.length];
    for (int i = 0; i < mergeArray.length; i++) {
        if (l >= left.length) mergeArray[i] = right[r++];
        else if (r >= right.length) mergeArray[i] = left[l++];
        else if (left[l] < right[r]) mergeArray[i] = left[l++];
        else mergeArray[i] = right[r++];
    }
    return mergeArray;
}
判断回文字符串
def isPal(s):
    if len(s) <= 1:
        return True
    else:
        return s[0]==s[-1] and isPal(s[1:-1])

相关文章

  • 分治算法基础

    应用场景 一个问题可以分解为若干个规模较小的相同问题,且各个子问题是相互独立的,且解决子问题后就可以解决这个问题,...

  • 分治算法

    文章结构 如何理解分治算法 分治算法应用举例 1. 如何理解分治算法 1.1 分治算法的核心思想 分治算法的核心思...

  • 29.算法入门

    算法与数据结构基础 一、基础算法思想二分: 递推: 枚举: 递归: 分治: 贪心: 试探: 模拟: 二、简单数据结...

  • 高级算法设计与分析

    目录 算法基础 算法复杂性 递归与分治 回溯法与分支限界法 贪心算法 动态规划法 NP问题 概率算法 现代优化算法...

  • 一位算法工程师的自我修养

    数据结构与算法 基本算法思想动态规划贪心算法回溯算法分治算法枚举算法 算法基础 时间复杂度 空间复杂度 最大复杂度...

  • 算法汇总

    关于算法: 基础技巧:分治、二分、贪心排序算法:快速排序、归并排序、计数排序搜索算法:回溯、递归、深度优先遍历,广...

  • 算法与数据结构简介

    0x01 算法 基础技巧:分治、二分、贪心 排序算法:快速排序、归并排序、计数排序 搜索算法:回溯、递归、深度优先...

  • 算法导论第2.3章 - 分治算法

    分治算法 递归:算法一次或多次递归地调用其自身已解决紧密相关的若干子问题。这些算法遵循分治法的思想。 分治算法三个...

  • 从分治算法到 MapReduce

    从分治算法说起 要说 MapReduce 就不得不说分治算法,而分治算法其实说白了,就是四个字 分而治之 。其实就...

  • Leetcode-Java(二十五)

    241. Different Ways to Add Parentheses 采用分治算法,分治算法的基本思想是将...

网友评论

      本文标题:分治算法基础

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