算法
amyacker
这个作者很懒,什么都没留下…
展开
-
《剑指offer》 替换空格
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy,则经过替换之后的字符串为We%20Are%20Happy时间复杂度为O(n)解法:先统计字符串中空格的个数,再计算出空格替换成%20后字符串的长度,然后从后往前处理,准备两个指针,一个指向新字符串的末尾,一个指向旧字符串的末尾。通过向前移来完成字符复制的过程。public String ...原创 2019-03-11 16:39:15 · 114 阅读 · 0 评论 -
《剑指offer》合并两个排序的链表
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。思路:假设list1的头节点小于list2的头节点,合并后的链表的头节点必是list1的头节点,同理list2也是一样,比较完头节点之后,再将list1的下一个节点与list2的头节点进行比较,同样小的节点进入合并后的链表,然后再比较,直到两个链表比较完。递归public ListNode Me...原创 2019-04-03 10:37:02 · 102 阅读 · 0 评论 -
《剑指offer》斐波那契数列
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39动态规划不要用递归,数值大可能导致栈溢出public int Fibonacci(int n) { if(n <= 0)return 0; if(n == 1 || n == 2) return 1; int f1=...原创 2019-03-23 23:05:44 · 127 阅读 · 0 评论 -
《剑指offer》链表中倒数第k个结点
输入一个链表,输出该链表中倒数第k个结点。思路定义两个指针:top和tail。tail指针先走 k-1 步,到达第 k 个节点。然后两指针同时齐步走,当tail指针到达末尾时,top指针在倒数第 k 个节点上。public ListNode FindKthToTail(ListNode head,int k) { ListNode tail = head; ...原创 2019-03-22 10:33:42 · 104 阅读 · 0 评论 -
《剑指offer》跳台阶
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。思路从第一次跳分析,如果第一次跳的是1级台阶,那么剩下的是n-1个台阶,跳法是f(n-1),如果第一次跳的是2级台阶,那么剩下的是n-2个台阶,跳法是f(n-2),则总跳法为: f(n) = f(n-1) + f(n-2)。可以看出这是一个斐波那契数列public...原创 2019-03-25 13:08:45 · 146 阅读 · 0 评论 -
《剑指offer》用两个栈实现队列
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。思路把元素压入stack1,弹出元素时先查看stack2是否为空,如果stack2不为空则弹出;stack2为空则将stack1中的元素全部弹出放到stack2import java.util.Stack;public class Solution { Stack<Integer>...原创 2019-03-18 09:33:01 · 83 阅读 · 0 评论 -
《剑指offer》从尾到头打印链表
输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。利用栈实现先进后出的思路public ArrayList&amp;lt;Integer&amp;gt; printListFromTailToHead(ListNode listNode) { ArrayList&amp;lt;Integer&amp;gt; list = new ArrayList&amp;lt;&amp;gt;();原创 2019-03-17 01:33:53 · 83 阅读 · 0 评论 -
《剑指offer》 二维数组中的查找
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。思路利用二维数组由上到下,由左到右递增的规律,那么选取左下角或者右上角的数字与要查找的数字。首先选取数组中右上角的数字。当要查找的数字小于该数字时,那么要查找的数字必定在该数字所在列的左边,即列–;当...原创 2019-03-11 23:38:47 · 117 阅读 · 0 评论 -
《剑指offer》反转链表
输入一个链表,反转链表后,输出新链表的表头。思路把它们分成两部分: 未反转部分(一条链表) 和 已反转部分(别外一条链表)。这两部分是断开的,注意保存这两条链表的头节点。原链表:A -> B -> C -> D -> E(已反转部分)A<-B <-C (断开) D-> E (未反转部分)准备两个空结点 next节点和pre节点:next节...原创 2019-03-20 12:01:23 · 79 阅读 · 0 评论 -
LRU算法 基于LinkedHashMap实现
简介LRU是Least Recently Used的缩写,即最近最少使用,常用于页面置换算法,是为虚拟页式存储管理服务的。核心:如果数据最近被访问过,那么将来访问的几率也更高利用LinkedHashMap实现1.利用LinkedHashMap中的构造方法要完成LRU, accessOrder必须为truepublic LinkedHashMap(int initialCapacity,...原创 2019-09-24 01:13:40 · 199 阅读 · 0 评论