
数据结构与算法
本专栏主要发布与数据结构、算法相关的博客。
esc_ai
这个作者很懒,什么都没留下…
展开
-
[数据结构]约瑟夫环问题
约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。原创 2015-11-22 23:19:34 · 5924 阅读 · 0 评论 -
LeetCode Array
LeetCode数组习题26.Remove Duplicates from Sorted Array题目描述:Given a sorted array, remove the duplicates in place such that each element appear only once and return the new length.Do not allocate extra spac原创 2017-06-16 00:58:57 · 927 阅读 · 0 评论 -
【死磕算法系列】二叉树的前序中序后序的递归和非递归遍历
一、二叉树的数据结构1.1 定义树节点public class TreeNode { String val; TreeNode left; TreeNode right; public TreeNode(String val) { this.val = val; } public String getVal() {...原创 2017-12-24 01:22:54 · 447 阅读 · 0 评论 -
【死磕算法系列】二叉树的镜像
一、二叉树镜像二叉树的镜像就是把每个节点的左子树和右字数互换位置,例如源二叉树为: 8 / \ 6 10 / \ / \ 5 7 9 11其镜像二叉树为: 8 / \ 10 6 /...原创 2017-12-24 02:17:48 · 406 阅读 · 0 评论 -
【死磕算法系列】二叉树的深度
一、递归实现public void treeDepth(TreeNode node){ if(node == null){ return 0; } int leftDepth=treeDepth(node.left); int rightDepth=treeDepth(node.right); return leftDepth>rightDep...原创 2017-12-24 13:36:23 · 479 阅读 · 0 评论 -
【死磕算法系列】二叉树的层次遍历
a / \ b c / \ / \ d e f g / h \ i对于上面的二叉树,层次遍历结果为:ab cd e f ghi...原创 2017-12-24 16:53:14 · 469 阅读 · 0 评论 -
【死磕算法系列】两个有序数组的公共部分
【死磕算法】 两个有序数组的公共元素问题提出 给定有序数组A和有序数组B,数组长度分别为M和N,求数组的公共元素。例如: A = {0, 1, 4, 9, 10} B = {1, 4, 8, 9, 11} A和B的公共元素为1,4,9一、最容易解法依次从数组A中取数据,挨个到B中去遍历。如果B中有,说明是公共元素,输出;否则就是没有。...原创 2018-01-29 14:38:57 · 2615 阅读 · 1 评论 -
字典序算法与全排列问题(时间复杂度O(N))
给定一个不重复数组组成的数组,比如{1,2,3},按照从小到大的顺序组成的全排列整数有6个:123、132、213、231、312、321,这6个数字都是换位数,即组成的数字一样,只是位置不一样而已。一、最近最大换位数首先解决第一个问题,如何找到给定整数,离它最近且比它大的换位数。比如:12534的最近最大换位数是12543,13254的最近最大换位数是13425。为了和原数接近,...原创 2018-04-10 13:07:35 · 7057 阅读 · 0 评论 -
协同过滤推荐算法
简单的理解协同过滤: 相似兴趣爱好的人喜欢相似的东西,具有相似属性的物品可以推荐给喜欢同类物品的人。比如,user A喜欢武侠片,user B也喜欢武侠片,那么可以把A喜欢而B没看过的武侠片推荐给B,反之亦然,这种模式称为基于用户的协同过滤推荐(User-User Collaborative Filtering Recommendation);再比如User A买了《java 核心技术卷一》,那么可原创 2015-12-31 16:19:08 · 2849 阅读 · 0 评论 -
贪心法求解背包问题
背包问题: 背包问题: 已知背包的容量为M和n件物品。第i件物品的重量为wi,价值为pi,将物品i的一部分xi放进背包即可获得价值pi*xi的价值。问题: 怎样装包使所获得的价值最大?贪心法核心思想: 贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。求解背包问题的贪心原则可原创 2015-12-29 19:10:26 · 4672 阅读 · 0 评论 -
概率算法
概率算法也叫随机化算法。分治算法、贪心算法、动态规划算法、回溯法、分治界限算法这些算法的每一计算步骤都是确定的,概率算法则允许算法在执行过程中随机地选择下一个计算步骤。在很多情况下,算法在执行过程中面临选择时,随机性选择比最优选择省时,因此概率算法可以在很大程度上降低算法的复杂度。原创 2015-12-25 16:04:04 · 1333 阅读 · 0 评论 -
最大子段和
给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。原创 2015-12-25 00:22:32 · 1202 阅读 · 0 评论 -
归并排序
归并排序c++ 代码原创 2015-12-23 20:12:05 · 1055 阅读 · 0 评论 -
快速排序
快速排序是分治算法的典型应用,基本策略:将数组A[1..n]分成两个子数组B[1..p]和B[p+1..n],使得B[1..p]中的元素均不大于B[p+1..n]中的元素,然后分别对这两个数组进行排序,最后把两个数组连接起来。原创 2015-12-23 19:43:09 · 946 阅读 · 0 评论 -
[数据结构]双机调度问题
双机调度问题解法:1.问题描述双机调度问题,又称独立任务最优调度:用两台处理机A和B处理n个作业。设第i个作业交给机器A处理时所需要的时间是a[i],若由机器B来处理,则所需要的时间是b[i]。现在要求每个作业只能由一台机器处理,每台机器都不能同时处理两个作业。设计一个动态规划算法,使得这两台机器处理完这n个作业的时间最短(从任何一台机器开工到最后一台机器停工的总的时间)。研究一个实例:n=6, a = {2,原创 2015-12-12 15:01:47 · 3629 阅读 · 0 评论 -
[数据结构]二分插入排序
二分插入排序是对二分查找和插入排序的一个结合,插入操作时通过二分查找找到要插入的位置.原创 2015-12-01 21:19:44 · 1418 阅读 · 0 评论 -
[数据结构]合并有序数组
合并有序数组原创 2015-12-01 16:02:39 · 1514 阅读 · 0 评论 -
[数据结构]折半搜索、归并排序( 分治思想)
折半搜索是分治算法思想的一典型例子,要解决输入规模很大的问题时可以将该问题分解,得到k个不同的可独立求解的子问题,求出字问题的解之后再用合适的方法合并求出整个问题的解。将整个问题分解成若干小问题来处理的方法称为分治法.比如:找一个学校里身高最高的同学,可以现在每个班找出最高的,把每个班里最高的汇合在一起,找出全校最高的。原创 2015-12-01 11:24:51 · 1384 阅读 · 0 评论 -
[数据结构]队列的基本操作
栈是先进后出,队列则是先进先出.下面贴一下队列的基本操作.1.队列的顺序表示.1.1队列的结构体定义原创 2015-12-01 09:23:03 · 3481 阅读 · 0 评论 -
[数据结构]栈的基本操作
栈的基本操作原创 2015-11-23 08:42:56 · 5413 阅读 · 0 评论 -
[数据结构]基本概念、单链表操作
单链表基本操作原创 2015-08-28 09:12:08 · 1406 阅读 · 0 评论