
算法与数据结构
文章平均质量分 66
HJsir
当你凝视深渊时,深渊也在凝视你
展开
-
利用0-1背包问题谈动态规划
动态规划解释维基百科的定义: - 动态规划的本质,是对问题状态的定义和状态转移方程的定义。引自维基百科dynamic programming is a method for solving a complex problem by breaking it down into a collection of simpler subproblems.动态规划是通过拆分问题,定义问题状态和状原创 2017-10-23 15:13:51 · 467 阅读 · 0 评论 -
LeetCode 376. Wiggle Subsequence -动态规划解法
A sequence of numbers is called a wiggle sequence if the differences between successive numbers strictly alternate between positive and negative. The first difference (if one exists) may be either posi原创 2018-03-02 16:51:45 · 390 阅读 · 0 评论 -
LeetCode 300. Longest Increasing Subsequence -动态规划的使用
Given an unsorted array of integers, find the length of longest increasing subsequence. For example, Given [10, 9, 2, 5, 3, 7, 101, 18], The longest increasing subsequence is [2, 3, 7, 101]...原创 2018-03-02 16:40:55 · 396 阅读 · 0 评论 -
LeetCode 64. Minimum Path Sum -备忘录法
Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which minimizes the sum of all numbers along its path.Note: You can only move either down or right at a...原创 2018-02-22 22:35:47 · 276 阅读 · 0 评论 -
并查集实现-(秩优化+路径压缩+java)
并查集,在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中。这一类问题近几年来反复出现在信息学的国际国内赛题中,其特点是看似并不复杂,但数据量极大,若用正常的数据结构来描述的话,往往在空间上过大,计算机无法承受;即使在空间上勉强通过,运行的时间复杂度也极高,根本就不可能在比赛规定的运行原创 2018-02-09 02:44:33 · 916 阅读 · 0 评论 -
二叉搜索树非递归实现-java版
二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。其实说白点就是一颗二叉树满足了左子节点小于根节点元素,右子节点大于根节点元素,这样的...原创 2018-02-08 20:45:36 · 1279 阅读 · 0 评论 -
LeetCode 215. Kth Largest Element in an Array-快速排序的灵活使用
在LeetCode上看到一个题目,第一眼看的感觉就是排序解决,然后思考了下堆排序不太合适,而快排速度很快,然后在快速排序的基础上进行了优化,写下来记录一下。题目Find the kth largest element in an unsorted array. Note that it is the kth largest element in the sorted order, no原创 2018-02-03 23:44:46 · 431 阅读 · 0 评论 -
排序算法总结-Shell排序、归并排序、快排、堆排
本章是对排序算法的一个总结,包括原理,代码,时间复杂度,空间复杂度等,总结内容不包括基础算法,如冒泡排序,插入排序,选择排序,另外文中代码均为手打,只展示核心思想,未经编译器测试。 对此约定一些基础函数:void swap(num,a,b); //交换数组num中序号为a,b的数组元素int max(a,b);//返回a,b中较大值。Shell排序shell排序基于插入排序原创 2017-11-15 20:22:16 · 1101 阅读 · 2 评论 -
动态规划之线性动规钢条切割问题
问题描述线性规划是一类问题。目标函数为特定变量的线性函数,约束是这些变量的线性不等式(standard form)或等式(slack form),目的是求目标函数的最大值或最小值。这类动态规划是平时比较常见的一类动态规划问题。假设公司出售一段长度为i英寸的钢条的价格为Pi(i = 1, 2, …单位:美元),下面给出了价格表样例: 切割钢条的问题是这样的:给定一段长度为n英寸的钢条和一个价格表Pi原创 2017-10-26 16:33:59 · 1029 阅读 · 0 评论 -
数据结构与算法-堆、基于堆实现的优先队列、堆排序
堆的概念堆是一种树形数据结构,每个节点都有一个值,通常我们说的堆是指二叉堆,是一种完全二叉树结构,堆的特点是根结点的值最小(或最大),根节点大的称为大顶堆、根节点小的称为小顶堆,且根结点的两个子树也是一个堆,这里的堆区别于内存中的堆。堆可用于堆排序、优先队列等。在这里我们使用数组存储,在数组中按层级储存(不使用数组第一个位置)。 如何构造堆?如何构造堆就是如何让堆有序化,因为刚开始输入数组中的数字原创 2017-11-11 17:25:45 · 760 阅读 · 0 评论 -
LeetCode 416. Partition Equal Subset Sum-0-1背包变型
Given a non-empty array containing only positive integers, find if the array can be partitioned into two subsets such that the sum of elements in both subsets is equal.Note: Each of the array element原创 2018-03-04 17:55:46 · 277 阅读 · 0 评论