- 博客(12)
- 收藏
- 关注
原创 动态规划——无后效性及如何消除后效性
无后效性定义无后效性是指如果在某个阶段上过程的状态已知,则从此阶段以后过程的发展变化仅与此阶段的状态有关,而与过程在此阶段以前的阶段所经历过的状态无关。利用动态规划方法求解多阶段决策过程问题,过程的状态必须具备无后效性。简单的说,就是在计算后面的数值时,只于当前的数值有关而与之前的数值无关。例题leetcode-53最大子序和[题目描述]给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。[分析]状态的定义:以nums[i]结尾的连续子数组
2020-09-14 22:11:51 5274
原创 动态规划——打家劫舍汇总
一、打家劫舍1[题目描述]你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。[解题思路]递归+记忆化搜索[分析]题目要求两间相邻的房屋不能同时闯入,所以,对于每间房屋都有两种选择:抢或不抢。[代码实现]方法1:递归函数定义:考虑偷取[0,…index]房
2020-09-13 17:22:30 252
原创 动态规划——买卖股票最佳时机
今天在leetcode上刷题时,遇到了这个题目,看到有一个题解写的非常好,提出一种方法能够解决全部的买卖股票的相关问题(在leetcode中分别为121,122,123,188,309,714),现将其整理出来,并加入一些自己的理解。文章参考自:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock/solution/yi-ge-fang-fa-tuan-mie-6-dao-gu-piao-wen-ti-by-l-3/方法介绍首先
2020-05-22 22:08:00 367 2
原创 一种特殊的树形结构——并查集
并查集并查集作为一种特殊的数据结构,主要用于解决连接问题,如网络中节点间的连接状态等,对于一组数据来说,并查集主要支持两个操作:1、Union(p,q)——将p,q两个元素合并在一同一个组中。2、find§——查找p元素在哪个组中。并查集还经常用来回答一个问题:isConnected(p,q)——p,q两个元素是否在同一个组中,即p,q两个元素是否相连接。接下来,主要介绍并查集的两种实现,Qui...
2020-04-27 00:32:03 270
原创 二叉搜索树进阶操作(c++代码实现)
本期主要介绍通过二叉搜索树的顺序性来进行的一些进阶操作,如floor、ceil、rank、selectfloor操作
2020-04-24 00:02:14 238
原创 二分搜索树及基本操作(c++代码实现)
二分搜索树二分搜索树通常用于实现查找表(字典数据结构key-value)查找插入删除普通数组O(n)O(n)O(n)顺序数组O(logn)O(n)O(n)二分搜索树O(logn)O(logn)O(logn)二分搜索树的优势:能够高效、动态维护数据,还可以很方便的回答很多数据关系的问题,比如min、max、floor、ceil、ran...
2020-04-20 23:26:48 999 1
原创 二分查找法及变种(c++代码实现)
查找问题是计算机中非常重要的基础问题,本篇主要针对二分搜索树进行深入的探讨。首先我们从最简单的二分查找法开始介绍。二分查找法对于有序数列,才能使用二分查找法(先排序!)[分析]例如,在有序数组中查找元素a首先,找到数组的中间元素v由于数组的有序性,所以元素v把数组分为了两个部分通过比较待查找元素a和中间元素v的关系,缩短查找范围。若a==v 返回v若a>v 则在>...
2020-04-18 23:39:04 452
原创 索引堆(c++代码实现)
索引堆[为什么要引入索引堆?]给出一个数组,构建如下树形结构通过heappify操作,构建一个堆当堆构建完成后,我们无法通过索引获取到原来元素所在位置,所以后续很难通过索引改变节点的值。所以我们引入索引堆[什么是索引堆?]将数组中的元素和索引分开存储,而真正表现成堆的是索引数组通过Index-heapify操作,构建索引堆,构建完成后,索引堆如下。通过构建堆前后进行对比,我...
2020-04-17 23:19:44 298
原创 堆和堆排序(c++代码实现)
1、堆和优先队列优先队列优先队列是一种特殊的队列,与普通队列相比,普通队列的特点是“先进先出,后进后出”而优先队列的出对顺序和如对顺序无关,与对内元素的优先级有关。优先队列的主要操作:入队、出队(出队优先级最高的元素)优先队列主要操作的实现方式入队出队普通数组O(1)O(n)顺序数组O(n)O(1)堆O(logn)O(logn)从表中可...
2020-04-15 22:52:28 911 1
原创 快速排序进阶优化之双路快排与三路快排(c++代码实现)
上一期博客总结了快速排序与快速排序的一些简单的优化方式,本期整理更高级的快速排序优化方式,分别为双路快排与三路快排双路快排[优化场景]对于取值范围很小,数据量又较大——即数组中存在非常多的重复元素。[分析]//partiton操作template<typename T>int__partition(int arr[], int l, int r){ swap(arr[r...
2020-04-13 23:30:18 565
原创 O(nlogn)的排序算法及基础优化(c++代码实现)
O(nlogn)的排序算法1、归并排序[算法思想]首先将数组进行两两分组,然后想办法把左边的数组排序,再把右边的数组排序,最后再归并起来(递归)[归并过程]开辟同样大小的临时空间,设置三个索引i,j,ki表示左边数组正在考虑元素的索引j表示右边数组正在考虑元素的索引k表示相比较后元素应该放到的位置[代码实现]//用户调用的函数template<typename T&...
2020-04-12 23:04:43 627 4
原创 O(n*n)的排序算法
今天学习了慕课网liuyubobobo老师的课程[https://coding.imooc.com/class/71.html],现把课程笔记整理如下,希望对各位能有所帮助
2020-04-10 23:49:47 487
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人