Java
java语言写剑指offer算法题
cungudafa
纯干货零收费,踩坑这件事儿我是专业的,能帮一个是一个,留个赞温暖你我他,幸福码农快乐搬砖,哈哈哈哈~
展开
-
【Java面试题】最小的K个数
【题目】:输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。【示例】:例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。这里采用Array排序(不是最优解),仅排序算法参考(快速排序法、插入法、冒泡法、全排序、堆排序、红黑树等)【关键点】: 数组【Java】:import ja...原创 2019-10-24 13:18:39 · 308 阅读 · 0 评论 -
【Java面试题】数组中出现次数超过一半的数字
【题目】:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。【示例】:将数组排序,如果符合条件的数存在,则一定是数组中间那个数。(比如:1,2,2,2,3;或2,2,2,3,4;或2,3,4,4,4等等),这种方法虽然容易理解,但由于...原创 2019-10-23 13:29:37 · 235 阅读 · 1 评论 -
【Java面试题】不用加减乘除做加法
【题目】:写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。【示例】:1 + 2 = 3 转换为2进制:0001+0010=0011难点:不能用+分析:参考:进制加减法原理在十进制加法中可以分为如下3步进行:忽略进位,只做对应各位数字相加,得到12(个位上5+7=12,忽略进位,结果2);记录进位,上一步计算中只有个位数字相加有进位1,进位值为1...原创 2019-10-18 11:02:31 · 236 阅读 · 0 评论 -
【Java面试题】二叉搜索树后序遍历
【题目】:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。【示例】:假设有如下二叉树:后序遍历顺序:左子、右子、根结果:1 4 3 6 9 7 5思路:BST的后序序列的合法序列是,对于一个序列S,最后一个元素是x (也就是根),如果去掉最后一个元素的序列为T,那么T满足:T可以分成两段,前...原创 2019-10-18 10:25:26 · 202 阅读 · 0 评论 -
【Java面试题】从上往下打印二叉树
【题目】:从上往下打印出二叉树的每个节点,同层节点从左至右打印。【思路】:题目中的要求顺序是:根、左、右。将树节点存入队列中,根据队列先入先出的特点,控制队列的入列顺序即可。【关键点】: 队列,树【Java】:import java.util.ArrayList;import java.util.LinkedList;//链表import java.util.Queue;//队列...原创 2019-10-17 13:44:39 · 266 阅读 · 0 评论 -
【Java面试题】栈的压入弹出序列
【题目】:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)【示例】:举例:入栈1,2,3,4,5出栈4,5,3,2,1首先1入辅...原创 2019-10-17 13:24:18 · 225 阅读 · 0 评论 -
【Java面试题】把数组排成最小的数
【题目】:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。【示例】:例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。思路:这道题比较简单,比较组成数字的大小即可;注意点: 比较的是结合后的数字, 在int[]和string[]的转换【关键点】: 数组,字符串拼接【Java】:import ja...原创 2019-10-17 13:01:14 · 194 阅读 · 0 评论 -
【Java面试题】判断B是不是A(二叉树)的子结构
【题目】:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)【思路】:循环取每个结点作比较:A(root)和B( subtree)匹配根节点匹配左右子结构有根同,子结构相同;返回true【关键点】: 二叉树【Java】:/**public class TreeNode { int val = 0; TreeN...原创 2019-09-25 10:19:50 · 332 阅读 · 0 评论 -
【Java面试题】二叉树的镜像
【题目】:操作给定的二叉树,将其变换为源二叉树的镜像。【示例】:【关键点】: 二叉树【Java】:/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.va...原创 2019-09-25 10:43:19 · 171 阅读 · 0 评论 -
【Java面试题】顺时针打印矩阵
【题目】:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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.【示例】:例如,如果输入如下4 X 4矩阵:则依次打印出数字1,2,3,4,8,12,16,15,14,1...转载 2019-09-25 13:08:06 · 199 阅读 · 0 评论 -
【Java面试题】栈中所含最小元素的min函数
【题目】:定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。【示例】:输入45237peek() 查看栈顶的对象而不移除它push() 入栈pop() 出栈用一个min栈同步存储stack栈最小数,比较;保证时间复杂度。入栈:出栈:【关键点】: 栈,O(1)【Java】:import java.util.St...原创 2019-09-25 14:28:37 · 274 阅读 · 0 评论 -
【Java面试题】左旋转字符串
【题目】:汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!【示例】:例如,字符序列S=”abcXYZdef”,输出循环左移3位后的结果,即“XYZd...原创 2019-09-25 14:48:33 · 265 阅读 · 0 评论 -
【Java面试题】字符串排序
【题目】:输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。【示例】:例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。【关...原创 2019-10-03 17:23:16 · 726 阅读 · 3 评论 -
【Java面试题】丑数
【题目】:把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。【示例】:括号内不是丑数1 , 2 , 3 , 4 , 5 , 6 ,(7), 8 , 9 , 10 ,(11), 12 ,(13,14), 15根据上述可以发现: 1乘以 (2、3、5)=2、...原创 2019-10-06 13:03:57 · 238 阅读 · 0 评论 -
【Java面试题】求1+2+3+...+n
【题目】:求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。【关键点】:等差数列: sum=1+2+3+…+n=(a1+an)n/2=>(1+n)n/2=>(n+n^2)/2【Java】:public class Solution { public int Sum_Solution...原创 2019-10-06 13:12:36 · 525 阅读 · 1 评论 -
【Java面试题】Java程序初始化顺序
Java程序初始化顺序:父类的静态代码块子类的静态代码块父类的普通代码块父类的构造方法子类的普通代码块子类的构造方法Java程序初始化顺序:父类的静态代码块子类的静态代码块父类的普通代码块父类的构造方法子类的普通代码块子类的构造方法class A { public A() { System.out.println("class A"); } ...原创 2019-09-23 22:52:53 · 270 阅读 · 0 评论 -
【Java面试题】try-catch-finally结合return执行顺序
对于异常捕获及返回执行顺序的实验和总结try{code1;return1} catch{code2;return2} finally {code3}public static void main(String[] args) { int flag=testtrycatch(); System.out.println("flag:"+flag); }...转载 2019-09-23 12:48:03 · 337 阅读 · 0 评论 -
【Java面试题】合并链表
【题目】:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。【示例】:已有两递增链表:12689和3457合并:结果:123456789【关键点】: 链表,递归【Java】:/*public class ListNode { int val; ListNode next = null; ListNode(in...转载 2019-09-22 17:54:26 · 203 阅读 · 1 评论 -
【Java面试题】0到n-1中缺失的数字
【题目】:0到n-1中缺失的数字一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0到n-1之内。在范围0到n-1的n个数字中有且只有一个数字不在该数组中,请找出这个数字【示例】:示例一:0,1,2,3,5输出:4示例二:0,3,4,2,5输出:1【关键点】:二分查找,数值和下标的关系在线测试:http://www.it1352.com/onlineto...转载 2019-09-17 16:21:07 · 385 阅读 · 2 评论 -
【Java面试题】二维数组的查找
【题目】:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。【示例】:现有数组如下图,输入6,判断数组中是否含有该整数。结果:true【关键点】: 数组遍历,复杂度O(mn)【Java】:public class Solution {...原创 2019-09-21 15:23:36 · 248 阅读 · 0 评论 -
【Java面试题】替换空格
【题目】:请实现一个函数,将一个字符串中的每个空格替换成“%20”。【示例】:例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。【关键点】: 字符串处理,正则表达式【Java】:public class Solution { public String replaceSpace(StringBuffer str) ...原创 2019-09-21 15:29:05 · 182 阅读 · 0 评论 -
【Java面试题】从尾到头打印链表
【题目】:输入一个链表,按链表从尾到头的顺序返回一个ArrayList。【示例】:输入链表123456倒序输出结果:654321【关键点】: 利用栈(先进后出)原理【Java】:/*** public class ListNode {* int val;* ListNode next = null;** List...原创 2019-09-21 15:51:00 · 132 阅读 · 0 评论 -
【Java面试题】重建二叉树
【题目】:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。【示例】:例如输入前序遍历序列和中序遍历序列{1,2,4,7,3,5,6,8}和{4,7,2,1,5,3,8,6}则重建二叉树并返回:【...原创 2019-09-21 16:56:16 · 221 阅读 · 0 评论 -
【Java面试题】用两个栈来实现队列
【题目】:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。【示例】: 队列:输入1234,输出1234【关键点】:利用栈(先进后出)原理、 2个栈组成队列(先进先出);栈1:入栈顺序abcd、出栈顺序dcba;栈2:入栈顺序 为栈1的出栈顺序dcba、 出栈顺序为abcd。队列:先进先出(输入abcd,出来顺序依旧是abcd)【Java】...原创 2019-09-21 18:16:04 · 263 阅读 · 0 评论 -
【Java面试题】旋转数组的最小数
【题目】:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。【示例】:现有旋转数组如下[6501,6828,6963,7036,7422,7674,8146,8468...原创 2019-09-21 18:59:59 · 280 阅读 · 0 评论 -
【Java面试题】斐波那契数列
【题目】:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39【示例】:从0开始的斐波那契数列(0+1+1+2+3+5+…),输入n=2找出该数列的第2项结果:1【关键点】: 斐波那契数列(两数之和)、非递归注意:n 的取值范围【Java】:public class Solution { p...原创 2019-09-22 11:44:22 · 396 阅读 · 0 评论 -
【Java面试题】青蛙跳台阶
目录一、青蛙跳台阶二、变态跳台阶一、青蛙跳台阶【题目】:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。【示例】:台阶青蛙跳法1级台阶1种跳法2级台阶2种跳法3级台阶3种跳法4级台阶5种跳法【关键点】: 进阶斐波那契数列,动态规划思路:跳到第n个台阶,只有两种可能...原创 2019-09-22 14:35:37 · 365 阅读 · 0 评论 -
【Java面试题】矩形覆盖
【题目】:我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?【示例】:n = 1 的时候 只能横着覆盖,一种n = 2 的时候 可以横着和竖着覆盖,两种n = 3 的时候 第三级横着覆盖,用了一级,剩下 n = 2,有两种覆盖方法 第三季竖着覆盖,用了两级,剩下 n = 1,有一...原创 2019-09-22 15:10:07 · 290 阅读 · 0 评论 -
【Java面试题】二进制中1的个数
【题目】:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。【示例】:输入:n=12(10进制)=1100(2进制)该数二进制表示中1的个数:结果:2【关键点】: 进制转换,与运算,补码原码反码 示例分析:如果一个整数不为0,那么这个整数至少有一位是1。如果我们把这个整数减1,那么原来处在整数最右边的1就会变为0,原来在1后面的所有的0都会变成1(如果最右边的...原创 2019-09-22 15:40:58 · 252 阅读 · 0 评论 -
【Java面试题】调整数组中数字顺序
【题目】:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。【示例】:给出:123456前奇数后偶:结果:135246【关键点】: 数组遍历,复杂度O(mn)【Java】:public class Solution { public void re...原创 2019-09-22 16:46:55 · 476 阅读 · 0 评论 -
【Java面试题】链表中倒数第k个结点
【题目】:输入一个链表,输出该链表中倒数第k个结点。【示例】:已知链表,给出k=3123456789 10找出该链表倒数第3个结点。结果:12345678【关键点】: 链表遍历两个链表指向head,pre先走k-1个节点;第k个数时,pre继续走,last从头开始走;pre走到完,last为倒数第k个。【Java】:/*public class ListNo...原创 2019-09-22 17:30:01 · 166 阅读 · 0 评论 -
【Java面试题】反转链表
【题目】:输入一个链表,反转链表后,输出新链表的表头。【示例】:abcd反转:结果:dbca【关键点】: 链表【Java】:/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/p...原创 2019-09-22 17:34:45 · 236 阅读 · 0 评论 -
【字符串切片】原理及实例应用——python、Java
目录Python切片* String字符串* list列表* 应用Java截取字符串* String运用Python切片Python3切片——String字符串、list列表参考链接:Python3 基本数据类型|菜鸟教程* String字符串切片原理:示例:#!/usr/bin/python3 str = 'Hellowold' print (str) ...原创 2019-06-27 13:32:53 · 1450 阅读 · 0 评论