![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java练习
九零后的鹏鹏
这个作者很懒,什么都没留下…
展开
-
练习题之空格替换
题目:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。解题思路: 这里因为要将字符串一个空格替换成“%20”,所以可以调用charAt()函数来取得对应下标字符,然后保存到StringBuffer中。代码:public class Solution { ...原创 2018-10-20 16:42:04 · 125 阅读 · 0 评论 -
练习题之合并两个排序的链表
题目:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。代码实现:/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public cl...原创 2018-10-26 16:29:59 · 137 阅读 · 0 评论 -
练习题之树的子结构
题目:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)代码实现:/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { t...原创 2018-10-26 16:33:05 · 115 阅读 · 0 评论 -
练习题之二叉树的镜像
题目:操作给定的二叉树,将其变换为源二叉树的镜像。代码实现:/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }...原创 2018-10-26 16:33:37 · 122 阅读 · 0 评论 -
练习题之二叉树的深度
题目:输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。代码实现:/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int ...原创 2018-10-26 16:27:52 · 244 阅读 · 0 评论 -
练习题之复杂链表的复制
题目:输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)解题思路:方法一:直接通过原来链表来创建链表,包括随机指针。方法二:1.遍历链表,复制每个节点,并将复制的节点插入到原结点之后。2.重新遍历链表,复制...原创 2018-11-03 14:46:44 · 108 阅读 · 0 评论 -
练习题之顺时针打印矩阵
题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.代码实现:import java.util.ArrayList;public class Solu...原创 2018-11-03 15:23:38 · 154 阅读 · 0 评论 -
练习题之包含min函数的栈
题目:定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。代码实现:import java.util.Stack;import java.util.Iterator;public class Solution { //定义一个栈 Stack<Integer> stack=new Stack<...原创 2018-11-03 15:25:17 · 118 阅读 · 0 评论 -
练习题之栈的压入,弹出序列
题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)代码实现import java.util.ArrayList;i...原创 2018-11-03 15:51:31 · 165 阅读 · 0 评论 -
练习题之从上往下打印二叉树
题目:从上往下打印出二叉树的每个节点,同层结点从左至右打印。代码实现import java.util.ArrayList;/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) {...原创 2018-11-03 16:06:12 · 161 阅读 · 0 评论 -
练习题之数组中出现次数超过一半的数字
题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。代码实现:/*解题思路: 1.先给数组进行排序。 2.因为要找出在数组中出现次数超过数组长度一半的数,那么这个数一定在中间。 ...原创 2018-11-03 17:08:51 · 228 阅读 · 0 评论 -
练习题之连续子数组的最大和
题目:例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续子序列的和,你会不会被他忽悠住?(子向量的长度至少是1)代码实现:/*使用动态规划: F(i):以array[i]为末尾元素的子数组的最大值,子数组的相对位置不变。 F(i)=max(F(i-1)+array[i...原创 2018-11-03 17:30:08 · 213 阅读 · 0 评论 -
练习题之反转链表
题目:输入一个链表,反转链表后,输出新链表的表头代码实现:/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public class Solution { //通过头插法 ...原创 2018-10-26 16:29:40 · 115 阅读 · 0 评论 -
练习题之链表中倒数第K个结点
题目:输入一个链表,输出该链表中倒数第k个结点。解题思路:定义两个指针一快一慢,快指针先走k步,然后快慢指针一起走,当快指针走完时返回慢指针指向的结点。代码实现:/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.va...原创 2018-10-26 16:29:11 · 300 阅读 · 0 评论 -
练习题之从尾到头打印链表
题目: 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。解题思路:借助栈结构“先进后出”的特点,先将链全部入栈,然后依次出栈,将出栈元素放入到ArrayList数组中。 代码实现:/*** public class ListNode {* int val;* ListNode next = null;**...原创 2018-10-20 16:48:57 · 82 阅读 · 0 评论 -
练习题之重建二叉树
题目: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。代码实现:/** * Definition for binary tree * public class TreeNode {...原创 2018-10-20 17:06:39 · 154 阅读 · 0 评论 -
练习题之两个栈实现队列
题目:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。解题思路:栈是一种先进后出的数据结构,队列是一种先进先出的数据结构,两个栈实现队列可以先将元素入一个栈stack1,然后出stack1,将出栈元素入栈stack2,然后再出栈stack2,这样就实现了先进先出。代码实现:import java.util.Stack;public ...原创 2018-10-20 17:13:14 · 122 阅读 · 0 评论 -
练习题之旋转数组的最小数字
题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。解题思路:采用二分法解答这个问题,mid = low + (high - low)/2需要考...原创 2018-10-20 17:23:03 · 75 阅读 · 0 评论 -
练习题之菲波那切数列
题目输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39 代码实现:public class Solution { public int Fibonacci(int n) { int f1=1; int f2=1; if(n==0) { return n; ...原创 2018-10-20 17:29:05 · 149 阅读 · 0 评论 -
练习题之跳台阶
题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。 解题思路:本题倾向于找规律,,f(1) = 1, f(2) = 2, f(3) = 3, f(4) = 5, 可以总结出f(n) = f(n-1) + f(n-2)的规律。假设有5个台阶,我们可以从第4个台阶一步跳到第5个台阶,也可以从第3个台阶两步跳到第...原创 2018-10-20 17:35:29 · 173 阅读 · 0 评论 -
练习题之变态跳台阶
题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。解题思路:n阶台阶会有n种的跳法:跳1级,跳2级……跳n级。跳1级,剩下n-1级,则剩下跳法是f(n-1)跳2级,剩下n-2级,则剩下跳法是f(n-2)所以f(n)=f(n-1)+f(n-2)+...+f(1)因为f(n-1)=f(n-2)+f(n-3)+.....原创 2018-10-20 17:45:53 · 138 阅读 · 0 评论 -
练习题之矩形覆盖
题目:我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?解题思路:本题思路跟青蛙跳台阶一样,要么一级要么两级。可以根据下列公式:n = 1时, f(n) = 1;n = 2时, f(n) = 2;n > 2时,f(n) = f(n - 1) + f(n - 2); 代码实现:...原创 2018-10-20 17:51:11 · 157 阅读 · 0 评论 -
练习题之二进制中1的个数
题目:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。解题思路:整数不为0,至少有一位是1。把整数减1,那么在原来整数最右边的1就会变成0,而0就会变成1。如二进制:1100减1,变成1011,如果在进行与运算就变成1000.那么今个二进制有多少个1就进行多少次与运算。代码实现:public class Solution { public int...原创 2018-10-20 18:07:13 · 183 阅读 · 0 评论 -
练习题之数值的整数次方
题目:给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。分析:浮点数次方注意分三种情况:(1)当次方值为正数(2)当次方为负数时(3)当次方为0通过循环累乘。代码实现:public class Solution { public double num=1.0; public double...原创 2018-10-26 16:28:23 · 108 阅读 · 0 评论 -
练习题之调整数组顺序使奇数位于偶数前面
题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。代码实现:类似于冒泡,前偶后奇就交换。public class Solution { public void reOrderArray(int [] array) { for(...原创 2018-10-26 16:28:51 · 123 阅读 · 0 评论 -
练习题之整数中1出现的次数
题目:求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。代码实现:/*解题思路: 将整数n转成字符串,然...原创 2018-11-03 17:40:34 · 263 阅读 · 0 评论