算法习题训练
学习算法应用知识
程序员小牧之
汲取,分享与成长,我们唯一能做的就是坚持。
展开
-
斐波那契数列,青蛙跳台阶问题,旋转数组的最小数字
一.斐波那契数列写入一个函数,输入一个数字n,求斐波那契数列的第n项,该数列的定义如下:F(0)=0,F(1)=1F(N)=F(N-1)+F(N+2),其中N>1斐波那契数列由0和1开始,之后的斐波那契数就是由之前的两数相加而得出。答案需取模1e9+7解决方案:1.递归法(分治)原理:把F(N)问题的计算拆分成F(N-1)+F(N-2)子问题的计算递归,并以F(0)和F(1)为终止条件public int fib(int n){ if(n==0) return 0; if(n原创 2020-09-18 21:08:51 · 276 阅读 · 0 评论 -
二叉树的镜像,对称的二叉树,顺时针打印矩阵,包含min函数的栈,栈的压入弹出序列
一.二叉树的镜像请完成一个函数,输入一个二叉树,要输出它的镜像例如:解决方案:通过分析上面的例子我们可以得到二叉树的镜像其实就是每个节点的左右节点交换位置后的二叉树,所以我们可以遍历二叉树的同时交换左右子节点的位置即可代码:TreeNode test(TreeNode root){if(root==null) return null;//边界条件TreeNode end=root.left;//中转节点root.left=test(root.right);root.right=tes原创 2020-09-16 21:51:01 · 156 阅读 · 0 评论 -
合并两个排序的链表,从尾到头打印链表,用两个栈实现队列
一.合并两个排序的链表输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的解决方案:新建两个节点,一个用于记录开始位置,一个用于移动排序ListNode help=new ListNode();//新建节点,用于移动排序,相当于一个中间变量ListNode end=help;//记录开始位置while(l1!=null&&l2!=null)//如果l1和l2都不为空,执行比较{ if(l1.val<l2.val) { help.n原创 2020-09-15 21:14:08 · 288 阅读 · 0 评论 -
替换空格,调整数组顺序使奇数位于偶数前面,找到链表中倒数第k个节点,反转链表
1.替换空格实现一个函数,把字符串s中的每一个空格替换成“%20”解法:调用String中的replace和replaceAll方法都可以完成s=s.replace(" ","%20");//replace方法的两个输入参数都是字符串s=s.replaceAll("\\s","%20");//replaceAll方法采用的正则表达式匹配方法2.调整数组顺序给定一个数组a,调整该数组中数字的顺序,使得所有奇数位于数组的前部分解法:新建一个数组,分别从两端开始存放判断后的数int lengt原创 2020-09-14 21:02:35 · 215 阅读 · 0 评论 -
找出数组中重复的数和二维数组中的查找
一.找出数组中重复的数在长度为n的数组nums里面的所有数字都在0~n-1的范围内,数组中某些数字是重复的,但不知道是哪几个,也不知道重复了几次,请找出数组中任意重复的数字解法:1.暴力解法:循环遍历逐个比较,我们可以利用两次循环找出一对相等的数返回for(int j=0;i<n-1;j++){ for(int i=j+1;i<n;i++) { if(nums[j]==nums[i]) return nums[j]; }}这种方法的好处在原创 2020-09-14 20:09:48 · 3684 阅读 · 0 评论 -
已知前序序列和中序序列重建二叉树
一.解决方法:在相关的书籍中描述了一个递归的解决方法,其算法思想如下:1.从前序序列中第一个元素开始,取出一个元素,索引后移一位(preIndex+1)2.根据选择到的数值创建一个树节点newNode3.然后查找所选的数值在中序序列中的索引,用inIndex存储4.递归调用此方法为inIndex之前的数组为中序序列构建一颗子树,将其作为newNode的左子树5.递归调用此方法为inIndex之后的数组为中序序列构建一颗子树,将其作为newNode的右子树6.返回newNode下面我们用实际的原创 2020-09-08 19:46:42 · 1058 阅读 · 0 评论 -
3.Sunday算法的一个小优化
优化算法思路:1.Sunday算法关键思想通过解析传统Sunday算法我发现它实现跳转的关键思想在于第二步,我们深入解析下第二步的原理:we should working hardworkh为什么要和work中的元素逐个比较?我们可以这样理解:1) 当h和w比较时,我们可以确定houl和work是否可能匹配2) 当h和o比较时,我们可以确定shou和work是否可能匹配3) 当h和r比较时,我们可以确定 sho和work是否可能匹配4) 当h和k比较时,我们可以确定e sh和work是否可原创 2020-06-26 15:13:54 · 878 阅读 · 0 评论 -
2.Sunday算法的学习及java实现
根据上面的步骤我写了一个在一个字符串中查找另一个字符串的算法java实现代码如下:package KeChengSheJi;public class SundayFind { public static void main(String[] args) { String a="I ama goodamboy"; String b="am "; SundayFind find=new SundayFind(); int i=fi.原创 2020-05-11 20:24:38 · 297 阅读 · 0 评论 -
1.一般Bloom过滤器
一.什么是Bloom过滤器?原创 2020-04-13 11:44:50 · 144 阅读 · 0 评论