有图有真相

一言不合就上源码

算法-动态规划 Dynamic Programming--从菜鸟到老鸟

前言最近在牛客网上做了几套公司的真题,发现有关动态规划(Dynamic Programming)算法的题目很多。相对于我来说,算法里面遇到的问题里面感觉最难的也就是动态规划(Dynamic Programming)算法了,于是花了好长时间,查找了相关的文献和资料准备彻底的理解动态规划(Dynami...

2017-07-15 22:58:29

阅读数:28489

评论数:8

笔试面试算法经典--数组partition调整使数组的左部分单调有序

【题目】 给定一个有序数组arr,调整使得数组的左部分无重复元素且有序,右边部分不要求。如数组arr[]={1,2,2,2,3,3,4,5,6,9,9} ;调整过后可以为:[1, 2, 3, 4, 5, 6, 9, 2, 3, 2, 9] 。思路:使用标记 u 其中arr[0…u] 表示已经处理...

2017-04-14 16:06:42

阅读数:337

评论数:0

笔试面试算法经典-未排序正整数数组中累加和为给定值的子数组

【题目】 给定一个数组 arr,该数组无序,但每个数均为正数,再给定一个正数 k 。求 arr 的所有子数组中所有元素相加为k的最长子数组长度。例如,arr=[1,2,1,1,1],k=3。累加和为3的子数组为[1,2] ,[2,3], [1,1,1]。解法1(时间复杂度O(N)空间复杂度O(1...

2017-04-13 23:15:29

阅读数:377

评论数:0

笔试面试算法经典--打印数组中相加和为给定值的二元组及三元组(Java)

【题目】给定一个递增的数组,要求打印数组中和为给定值的二元组,例如: arr[]={-8, -4, -1, 0, 1, 3, 4, 5, 6, 7, 9} , k=10,打印结果为:  1——9  3——7  4——61.打印二元组解法1(时间复杂度 O(N * N)空间复杂度 O(1)) ...

2017-04-13 21:52:38

阅读数:634

评论数:0

笔试面试算法经典-找到数组中出现次数大于N/k的数(Java)

【题目】 给定一个整型数组arr,再给定一个整数k,打印所有出现次数大于 N/K 的数。如果没有这样的数,打印提示信息。 【要求】 时间复杂度为O(N*K),额外空间复杂度为O(K)。【思路】 每次从数组中删除 K 个不同的数,如果某个数的次数大于 N/K ,这个数最后肯定会剩下来,数学证...

2017-04-08 22:46:07

阅读数:1495

评论数:1

笔试面试算法经典--矩阵的最短路径和(Java)

题目 给定一个矩阵m,从左上角开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有的数字累加起来就是路径和,返回所有路径中最小的路径和。 例子: 给定m如下: 1 3 5 9 8 1 3 4 5 0 6 1 8 8 4 0 路径1,3,1,0,6,1...

2017-04-07 17:11:17

阅读数:4792

评论数:0

笔试面试算法经典--最长公共子串(Longest Common SubString)

最长公共子串(Longest Common Substring): 是指两个字符串中最长连续相同的子串长度。例如:str1=“1AB2345CD”,str2=”12345EF”,则str1,str2的最长公共子串为2345。解法1如果 str1 的长度为 N,str2 的长度为 M,生成大小为...

2017-04-06 20:53:09

阅读数:1854

评论数:1

笔试面试算法经典--全排列算法-递归&字典序实现(Java)

全排列算法-递归&字典序实现全排列: 从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。 例如: 1 、2 、3三个元素的全排列为:{1,2,3},{1,3,2},{2,1,3},{2,3,1}...

2017-04-01 09:48:42

阅读数:7422

评论数:3

快速排序QuickSort(Java)

快速排序思想 如上图:每趟快速排序开始时,设置一个key,key=array[low],然后由high向左,找到小于key的值,复制到low位置,然后再由low向右找到大于key的值,复制到high位置,直到low=high结束, 将key的复制到low位置。 上图中第一轮划...

2017-03-31 09:43:45

阅读数:5594

评论数:2

堆排序HeapSort(Java)

堆排序堆排序思想:堆排序分为三个过程:①建堆:使得任一个节点的值大于左右孩子节点的元素因此堆顶的元素最大(大根堆)。②调整堆:删除掉堆顶元素后,还要保持堆的性质就要对堆进行调整。③堆排序:每次选择堆顶元素,并将堆顶元素删除,调整堆后,再重复操作直至堆为空。下面是这三种操作的具体过程:①建堆,建堆是...

2017-03-30 22:48:19

阅读数:1858

评论数:2

归并排序MergeSort(Java)

归并排序思想:先将数组中的每两个进行合并并且在合并的过程中进行排序,然后每四个进行合并。一直到数组合并完成。 例如上图中:要对数组中的元素:80、30、60、20、10、60、50、70进行排序,先把数组分成8组先分别对这八组进行合并排序,(30,80),(20,60),(10,60),(50,...

2017-03-30 22:01:28

阅读数:834

评论数:0

剑指offer-丑数(Java)

题目描述 把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。思路: 使用一个数组将之前已经求出来的丑数保存起来,然后依次用2,3,5乘上数组中已经求出来的丑数,选出其...

2017-03-27 22:11:43

阅读数:1412

评论数:0

剑指offer-把数组排成最小的数(Java)

题目描述 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。思路: 数组中所有的数拼接后有可能会超过整数的范围,因此本题必须要使用字符串来处理。 要对3,32 ,32...

2017-03-26 22:28:56

阅读数:1363

评论数:0

剑指offer-求数组中最小的k个数

题目描述 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。解法1(冒泡排序)冒泡排序每循环一次能够选出一个最小的数,题目要求选出最小的k的数,因此时间复杂度为O(k*N)。import java.util.ArrayLis...

2017-03-25 22:22:20

阅读数:551

评论数:0

Stack(5)对栈排序不用循环空间复杂度O(1)

对栈stack排序,不能使用循环while,for等,只能使用Stack的以下方法(Java版本)isEmpty():判断堆栈是否为空。 push(S):将新元素添加到堆栈。 pop(S):从堆栈中删除顶层元素。 peek(S):返回顶元素的值。例输入:-3 <---顶部 1...

2017-03-24 20:54:37

阅读数:774

评论数:0

Stack(4)判断数组是不是二叉搜索树的前序遍历(递归及非递归实现)

给定一个数组,如果给定的数组是二进制搜索树的先序遍历结果,则返回true,否则返回false。时间复杂度为O(n)。 例子:输入: pre[] = {2, 4, 3} 输出: true 下面是上面数组对应的二叉搜索树 2 \ 4 / 3输入: ...

2017-03-24 16:40:00

阅读数:466

评论数:0

Stack(篇3)设计一个栈能够在O(1)的时间内getMin

问题:设计一个数据结构SpecialStack,支持所有的栈操作,如push(),pop(),isEmpty(),isFull()和一个附加的操作getMin()它应该从SpecialStack返回最小元素。SpecialStack的所有这些操作必须是O(1)。要实现SpecialStack,你应...

2017-03-23 22:17:00

阅读数:231

评论数:0

Stack(篇2)设计一个栈能在O(1)的时间和O(1)的空间getMin()

在上一篇文章中实现了 使用O(1)时间和O(n)的额外空间的方法getMin()。在本文中,讨论了一种支持O(1)额外空间的最新方法。 我们定义一个变量minEle,它存储堆栈中的当前最小元素。现在的问题是如何处理最小元素被删除的情况。为了处理这个,我们将“2x-minEle”推入堆栈而不是x...

2017-03-23 22:08:42

阅读数:328

评论数:0

Stack(篇1)计算全排列大于等于其的自然数

有一些自然数,其所有排列大于或等于该数字,例如。123,其所有置换(123,231,321)都大于或等于123。 给定自然数n,任务是计数从1到n的所有这样的数。 例子:输入:N = 15 输出:14 1,2,3,4,5,6,7,8,9,11,12, 13,14,15是其所有的数字 排列比...

2017-03-20 17:29:29

阅读数:549

评论数:0

查找数组中3个相加和为零的元素

输入 : arr[] = {0, -1, 2, -3, 1} 输出: 0 -1 1 2 -3 1输入: arr[] = {1, -2, 1, 0, 5} 输出: 1 -2 1解法1(简单时间复杂复杂度O(n^3)空间复杂度O(1))public static void fin...

2017-03-19 21:28:18

阅读数:2743

评论数:0

提示
确定要删除当前文章?
取消 删除
关闭
关闭