
剑指offer
goforitaaa
这个作者很懒,什么都没留下…
展开
-
重建二叉树
题目描述:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。思路:前序遍历,第一个数为根节点,确定好根节点后,在中序遍历里面找到根节点。位于根节点左边的就是该树的左子数,位于根节点右边就是右子数。分别算出左...原创 2019-06-13 22:46:26 · 117 阅读 · 0 评论 -
连续最大子序列和
题目描述:HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续子...原创 2019-09-12 12:42:35 · 288 阅读 · 0 评论 -
数组中第k小个数
解题思路:我的思路是将数组进行排序,排序后,把前k个数输出就可以了。public class Demo32数组中第k小个数 { private static void insertSort(int arr[]){ for(int i = 1;i<arr.length;i++){ int j =i; ...原创 2019-08-18 09:56:50 · 207 阅读 · 0 评论 -
数组中出现次数超过一半的数字
解题思路:先对数组进行排序,我用的是快排,排序好后,出现次数超过一般的数字,就位于数组中间,然后在查找在中间的数。返回就可以了。public class Demo31数组中出现次数超过一般的数字 { public static void quickSort1(int arr[],int l,int r){ if(l>r){ return;...原创 2019-08-18 09:51:08 · 108 阅读 · 0 评论 -
笔试
题目描述:为了找到自己满意的工作,牛牛收集了每种工作的难度和报酬。牛牛选工作的标准是在难度不超过自身能力值的情况下,牛牛选择报酬最高的工作。在牛牛选定了自己的工作后,牛牛的小伙伴们来找牛牛帮忙选工作,牛牛依然使用自己的标准来帮助小伙伴们。牛牛的小伙伴太多了,于是他只好把这个任务交给了你。每个输入包含一个测试用例。每个测试用例的第一行包含两个正整数,分别表示工作的数量N(N<=10000...原创 2019-08-06 19:16:49 · 125 阅读 · 0 评论 -
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba
本题递归思想:划分,递归求解public static ArrayList<String> Permutation(String str){ ArrayList<String > resultlist = new ArrayList<String>(); if(str.length()==0 || str==nu...原创 2019-07-25 18:04:41 · 1874 阅读 · 0 评论 -
数值的整数次方
题目描述:给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。整数次方,包括正整数,0和负整数public double Power(double base, int exponent) { double temp =1; if(exponent>0){ for(i...原创 2019-07-09 22:37:08 · 140 阅读 · 0 评论 -
二进制中1的个数
二进制中1的个数题目描述:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。public int NumberOf1(int n) { int count=0; if(n!=0){ int flag=1; while(flag!=0){ if ((n & flag) != 0)...原创 2019-07-08 23:06:13 · 129 阅读 · 0 评论 -
递归
题目描述:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39注意这里数值从0开始的。public class Solution { public int Fibonacci(int n) { if(n==0){ return 0; } i...原创 2019-06-17 21:13:49 · 112 阅读 · 0 评论 -
从尾到头打印链表
题目描述:输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。思路一:从后到前打印,从前往后遍历,想到利用栈操作,后进先出。直接上代码 public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { ListNode head = listNode; ...原创 2019-06-11 21:19:05 · 114 阅读 · 0 评论 -
合并两个排序链表
题目描述:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。public class Solution { public ListNode Merge(ListNode list1,ListNode list2) { ListNode resultList = new ListNode(0);//头结点 ...原创 2019-06-20 20:18:57 · 89 阅读 · 0 评论 -
空格替换2
继昨天之后,再一个空格替换思路:1,把字符串转换成字符数组2,计算数组中有多少个空格,重新计算一个长度,开辟一个新数组。3,将原来的旧数组拷贝到新数组里面。p1指向旧数组最后一个位置,p2指向新数组的最后一个位置。从后往前赋值,遇到空格就替换。一直重复这个工程就行。代码实现public String replace(StringBuffer stri){ ...原创 2019-06-11 09:26:51 · 190 阅读 · 0 评论 -
空格替换
题目描述:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。实现代码public class Solution { public String replaceSpace(StringBuffer str){ if(str==null || str...原创 2019-06-10 23:34:26 · 186 阅读 · 0 评论 -
链表反转
题目描述:输入一个链表,反转链表后,输出新链表的表头。这里我采用递归的形式写public class Solution { public ListNode ReverseList(ListNode head){ if(head==null || head.next==null){ return head; } ...原创 2019-06-20 10:33:03 · 119 阅读 · 0 评论 -
二维数组中的查找
牛客网刷题第一天题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。思路一:最简单的方法当然是两层for循环遍历喽,不过时间复杂度比较高思路二:用二分查找,每一行看成一个有序的递增序列。用二分查找方法。思路三:比较矩阵右上角的数与...原创 2019-06-09 22:48:15 · 144 阅读 · 0 评论 -
两个栈实现队列
题目描述:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。这个题很简单了,直接上代码public class Solution { Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer> stack2 = new Stack<In...原创 2019-06-13 22:50:04 · 120 阅读 · 0 评论 -
从上到下打印二叉树
二叉树的层序遍历:采用队列法 public ArrayList<Integer> PrintFromTopToBottom(TreeNode root){ Queue<TreeNode> queue =new ArrayDeque<TreeNode>(); ArrayList<Integer> list ...原创 2019-09-12 13:43:59 · 148 阅读 · 0 评论