数据结构与算法(九)动态规划


特点局部最优解:也就是它会有一个最优子结构子问题可以重复状态转移方程:通过把问题分成很多小阶段一段段的转移。从而得出最优解.状态转移方程是解决动态规划的关键。如果我们能写出状态转移方程,那动态规划问题基本上就解决一大半了,翻译成代码非常简单。但是很多动态规划问题的状态本身就不好定义,状态转移方程也就

数据结构与算法(八)贪心算法


定义贪心算法又叫做贪婪算法,它在求解某个问题是,总是做出眼前最大利益。特点局部最优解通过局部最优推出全局最优习题某天早上公司领导找你解决一个问题,明天公司有N个同等级的会议需要使用同一个会议室,现在给你这个N个会议的开始和结束时间,你怎么样安排才能使会议室最大利用?即安排最多场次的会议?会议时间:0

数据结构与算法(七)排序 选择&冒泡&快速


选择排序public static void sort(int[] arr) { //在数组中选择一个最小的数,与最前面的数进行交换 int n = arr.length; for (int i = 0; i < n; i++) {

数据结构与算法(六)排序 插入&希尔&归并


插入排序public static void sort(int[] arr) { for (int i = 1; i < arr.length; i++) {//默认首位已排好序 int data = arr[i]; int j = i

数据结构与算法(五)队列


定义队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。特点队列的数据元素又称为队列元素。在队列中插入一个队列

数据结构与算法(四)栈


定义栈是一个限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。特点后进先出(LIF

数据结构与算法(三)链表


定义链表通过指针将一组零散的内存块串联在一起。其中,我们把内存块称为链表的“结点”。为了将所有的结点串起来,每个链表的结点除了存储数据之外,还需要记录链上的下一个结点的地址。特点不需要连续的内存空间。有指针引用三种最常见的链表结构:单链表、双向链表和循环链表图形从单链表图中,可以发现,有两个结点是比

数据结构与算法(二)数组


什么是数组数组是有序的元素序列,若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标。数组是在程序设计中,为了处理方便,把具有相同类型的若干元素按有序的形式组织起来的一种形式。这些有

数据结构与算法(一)时间复杂度


时间复杂度:运行一段程序所花费的时间。空间复杂度:运行程序所需要的内存。以下使用代码说明//执行时间从小到大排序O(1)<O(logn)<O(n)<O(nlogn)<O(n^2)<O(n^x)inta=1;//O(1)for(inti=0;i<10;i++){//