算法编程从入门到精通
追求进步系列,每天三个算法,从简单到复杂,不断地提高编程技术,题目来源剑指offer,以及程序猿面试指南等算法题目。
quentain
简单做人,勤奋做事!
展开
-
【追究进步】二叉树的镜像
题目描述操作给定的二叉树,将其变换为源二叉树的镜像。 输入描述:二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7原创 2016-03-25 10:04:30 · 379 阅读 · 0 评论 -
【追求进步】树的子结构
题目描述输入两颗二叉树A,B,判断B是不是A的子结构。在线代码:/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val;原创 2016-03-24 11:58:09 · 375 阅读 · 0 评论 -
【追求进步】合并两个排序的链表
题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。这个题目的解法两种(递归方法和非递归方法):在线代码:/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val原创 2016-03-24 10:59:23 · 369 阅读 · 0 评论 -
【追求进步】反转链表
前几天做了从尾到头打印链表元素的题目,以下链接是栈的方式输出。http://blog.csdn.net/quentain/article/details/50906099本题还有递归的方法,补充下递归的方法。递归解法:public class Solution { ArrayList arrayList=new ArrayList(); public ArrayLi原创 2016-03-24 09:47:56 · 396 阅读 · 0 评论 -
【追求进步】孩子们的游戏(圆圈中最后剩下的数)【百度阿里面试常考算法之一】
之前在做ACM的时候发现了这个著名的约瑟夫环问题,并且自己自己思考,理解之后发表了这篇博客:http://blog.csdn.net/quentain/article/details/50081539今天再次遇到这个题目自己编程练习了下,思路就是两种,一种是环形链表,再一个就是数学归纳总结的递归式子,感觉还是蛮有意思的题目。题目描述每年六一儿童节,NowCoder都原创 2016-03-23 20:02:55 · 899 阅读 · 3 评论 -
【追求进步】第一个只出现一次的字符位置
这个题目普遍的想法即就是for循环然后比较,复杂度是o(n)题目描述在一个字符串(1在线代码: import java.util.HashMap; public class Solution { public int FirstNotRepeatingChar(String str) { //第一种方法是初始a到z的一个数组,数组的下原创 2016-03-23 18:57:33 · 404 阅读 · 0 评论 -
【追求进步】和为S的两个数字
20、21、22三天无更新每日提高算法题,今天追上这两天准备面试的经典四个题目。题目描述输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。 输出描述:对应每个测试案例,输出两个数,小的先输出。在线代码思路很清晰简单:import java.util.ArrayList;pub原创 2016-03-23 16:09:35 · 536 阅读 · 0 评论 -
【追求进步】调整数组顺序使奇数位于偶数前面
题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。这道题考察的排序。这题这一看,分成两部本,太开心了,原来是快排的变种,于是写了程序,后来结果大家知道了,肯定不满足相对位置不变这个条件。因为快排本身就是不稳定的算法,稳定高效的排序算法常用的只有归并了原创 2016-03-19 11:59:33 · 391 阅读 · 0 评论 -
【追求进步】数值的整数次方
题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。起初看起来简单,但是实际做起来考虑的很多,还不是那么容易,没有优化。在线代码:public class Solution { public double Power(double base, int exponent) { //原创 2016-03-19 11:27:13 · 414 阅读 · 0 评论 -
【追求进步】二进制中1的个数
题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。在线代码:public class Solution { public int NumberOf1(int n) { //第一种办法 /* int result=0; //int4个字节32位 for(int i=0;i<32;i++){原创 2016-03-19 10:31:48 · 415 阅读 · 0 评论 -
【追求进步】矩形覆盖
题目描述我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?还是递归,一早上的递归,还是斐波那契,一早上都是斐波那契数列。在线代码:public class Solution { public int RectCover(int target) { if(target==1原创 2016-03-18 12:20:55 · 517 阅读 · 0 评论 -
【追求进步】变态跳台阶
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。变态跳台阶是上一个题的拓展。详细解法:关于本题,前提是n个台阶会有一次n阶的跳法。分析如下:f(1) = 1f(2) = f(2-1) + f(2-2) //f(2-2) 表示2阶一次跳2阶的次数。f(原创 2016-03-18 11:48:19 · 422 阅读 · 0 评论 -
【追求进步】跳台阶
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。总之同样也是斐波那契数列首先我们考虑最简单的情况。如果只有1个台阶,那显然只有一种跳法。如果有2级台阶,那就有两种跳的方法了。一种是分两次跳,每次跳1级;另外一种就是一次跳2级。接着我们再来讨论一般情况。我们把n级台阶时的跳法看成是n的函数,记为f(n).当n>2时,第原创 2016-03-18 11:23:14 · 389 阅读 · 0 评论 -
【追求进步】斐波那契数列
题目描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。总之不能用递归!代码:public class Solution { public int Fibonacci(int n) { //当n=0,f(n)=0;当n=1,f(n)=1;当n>1,f(n)=f(n-1)+(n-2); //输入非负整数返原创 2016-03-18 10:47:48 · 531 阅读 · 0 评论 -
【追求进步】旋转数组的最小数字
【加油加油,每天进步三个算法!希望自己能坚持下去····】题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减序列的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。在线代码:import java.util.ArrayList;public class So原创 2016-03-17 13:01:30 · 398 阅读 · 0 评论 -
【追求进步】用两个栈实现队列
题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。在线代码:import java.util.Stack;public class Solution { Stack stack1 = new Stack(); Stack stack2 = new Stack(); public void push原创 2016-03-17 11:48:55 · 323 阅读 · 0 评论 -
【追求进步】重建二叉树
题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。在线代码:/** * Definition for binary tree * public class TreeNode {原创 2016-03-17 11:16:34 · 342 阅读 · 0 评论 -
【追求进步】从尾到头打印链表
题目描述输入一个链表,从尾到头打印链表每个节点的值。 输入描述:输入为链表的表头输出描述:输出为需要打印的“新链表”的表头代码如下:/*** public class ListNode {* int val;* ListNode next = null;** ListNode(int val) {*原创 2016-03-16 16:20:19 · 382 阅读 · 0 评论 -
【追求进步】替换空格
题目描述请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。代码实现:public class Solution { public String replaceSpace(StringBuffer str) { /* //判断输入是否合法原创 2016-03-16 13:59:53 · 389 阅读 · 0 评论 -
【算法】二维数组中的查找
题目描述在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 输入描述:array: 待查找的二维数组target:查找的数字输出描述:查找到返回true,查找不到返回false代码:public class Solution { /*规律原创 2016-03-16 11:23:44 · 568 阅读 · 0 评论