![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法与数据结构
非emoji
来日方长,何惧车遥马慢
展开
-
回溯之迷宫问题
回溯的处理思想有点类似枚举搜索。通过枚举所有的解,找到满足期望的解。为了有规律地枚举所有可能的解,避免遗漏和重复,我们把问题求解的过程分为多个阶段。每个阶段,都会面对一个岔路口,我们先随意选一条路走,当发现这条路走不通的时候(不符合期望的解),就回退到上一个岔路口,另选一种走法继续走摘自:https://blog.csdn.net/qq_40378034/article/details/102764545解题思路:迷宫中,没有路就往回走到岔路口,显然是一个回溯的过程递归结束条件? 到达终点回溯的.原创 2020-07-21 02:33:33 · 81 阅读 · 0 评论 -
分治法之汉诺塔
经典题目,练手用解题思路:要处理第n个,需要对前n个作出处理汉诺塔中盘子由小到大进行排列,若要第n个盘子的移到目标柱,需要将前n-1个盘子移至中间柱将前n-1个盘子移至中间柱,那么目标柱便替换为中间柱,原目标柱变为中间柱,第n个盘子移入目标柱后,前n个盘子此时位于中间柱,所以要将第n-1个盘子移至目标柱,要将原中间柱视为初始柱,起始柱视为中间柱,以此递归package com.算法.part01分治回溯;/* * 作用:分治法之汉诺塔 * *@author hby_gd@163.com *原创 2020-07-21 00:29:29 · 170 阅读 · 1 评论 -
分治法之棋盘覆盖
题目要求:在一个2k∗2k(k≥0)2^k*2^k(k≥0)2k∗2k(k≥0) 个方格组成的棋盘中,恰有一-个方格与其他方格不同,称该方格为特殊方格。显然,特殊方格在棋盘中可能出现的位置有4k4^k4k种,因而有4k4^k4k种不同的棋盘。棋盘覆盖问题要求用4种不同形状的L型骨牌覆盖给定棋盘上除特殊方格以外的所有方格,且任何2个L型骨牌不得重叠覆盖。解题思路:k=0 ,不需要填充k = 1,填充1个骨牌k = 2,填充41+1k = 3,填充4(5)+1…k = n显然是一个由上到下递归原创 2020-07-20 11:20:14 · 272 阅读 · 0 评论 -
Leetcode无重符字符的最长子串
题目要求:给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。解题思路一:暴力计算利用hashMap键值对分别存储字符串的位数,以及该位置作为不含重复的子字符串的长度外层循环求向 hashMap 中存储 位数及长度第一层内循环,求当前位置为首端的无重复数组的长度第二层循环,判断是否使无重复数组算法分析:时间复杂度:O(n3)O(n^3)O(n3)代码实现p原创 2020-07-19 20:55:38 · 61 阅读 · 0 评论 -
分治法之大数乘法问题
分治法之大整数乘法问题快速傅里叶变换,减少算法的时间复杂度 O(n2)O(n^2)O(n2)->O(nlogN)O(nlogN)O(nlogN)在长度较大数字进行乘法运算时,时间复杂度为 O(n2)O(n^2)O(n2)思考如何将其时间复杂度降低举例:12345678∗8765432112345678*8765432112345678∗87654321=(1234∗104+5678)∗(8765∗104+4321)=(1234*10^4+5678)*(8765*10^4+4321)=(1原创 2020-07-19 12:12:41 · 290 阅读 · 0 评论 -
leetcod两数相加问题
题目要求:给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。题目分析,要求数字相加求和思路一:第一印象便是将每个链表所表示的数字提取出来,求和后在重新存储在链表中,但在这一过程中,会在链表与数字的转化过程中产生大量的开销,所以放弃这种思路思路二:题目所给的链表是逆序排列,并且要返回一个逆序存原创 2020-07-19 12:00:22 · 108 阅读 · 0 评论