随笔分类 - 算法
摘要:堆排序 堆排序 对于非递归的堆排序主要有两个步骤: (一)构建大/小根堆 (二)对于构建好的堆,每次取第一个元素(也就是最大或者最小的那个元素)和最后一个元素交换,并把它移除堆的结构,这样,就必须重新维护剩下的树,使它重新变成一个大/小根堆,重复这个步骤,直到堆中的元素为0。 代码 代码 结果 结果
阅读全文
摘要:直接插入排序 直接插入排序 直接插入排序就是每步将一个待排序的记录按其关键字的大小插到前面已经排序的序列中的适当位置,直到全部记录插入完毕为止。比较简单就直接上代码了。 代码 代码 二叉查找插入排序 二叉查找插入排序 又之前的代码可以看出,直接插入排序的时间复杂度为O(n2),而且还可以看出,每次有
阅读全文
摘要:题目 题目 给定两个字符串str1和str2,返回两个字符串的最长公共子序列 解析 解析 本题是非常经典的动态规划问题,先来介绍求解动态规划表的过程。如果str1的长度为M,str2的长度为N,生成大小为M*N的矩阵dp,行数为M,列数为N。dp[i][j]的含义是str1[0..i]和str2[0
阅读全文
摘要:题目 题目 给定一个单链表的头节点head,实现一个调整单链表的函数,使得每k个节点之间逆序,如果最后不够k个节点一组,则不调整最后几个节点。 例如: 链表:1->2->3->4->5->6->7->8->null,k=3 调整后:3->2->1->6->5->4->7->8->null 分析 方法
阅读全文
摘要:题目 题目 只能用递归函数实现栈中元素逆序。例如,1,2,3,4,5依次压栈,栈中元素为从栈顶到栈底5,4,3,2,1。要求只用递归实现栈的逆序。 解答 解答 设计两个递归函数 递归函数一:将栈的栈底元素返回并移除 getAndRemoveLastElement 递归函数二:逆序一个栈 revers
阅读全文
摘要:题目 题目 给定一个无序数组arr,其中元素可正,可负,可0,给定一个整数k。求arr所有的子数组中累加和为k的最长子数组长度。 分析 分析 为了解答题目,引入一个概念,s(i)代表子数组arr[0..i]所有元素的累加和。那么子数组arr[j-1, i](0<=j<=i<arr.length)的累
阅读全文

浙公网安备 33010602011771号