剑指offer
骑着蜗牛逛世界
只当个人学习记录之用
展开
-
树的层次、前序、中序、后序遍历
1:层次遍历核心思想:借助一个队列存储节点,先把头节点放进去,输出当前节点值的同时,把当前节点的左右节点按顺序送进队列,只要队列不为空,就按先进先出弹出对应当前节点 public static void LaywerTraversal(TreeNode root){ if(root==null) return; LinkedList<TreeNode> list = new LinkedList<TreeNode>();原创 2021-08-14 16:51:22 · 239 阅读 · 0 评论 -
38:二叉树的深度
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。示例1输入复制{1,2,3,4,5,#,6,#,#,7}返回值复制4第一种解法:函数递归加1 public int TreeDepth(TreeNode root) { if(root == null){ return 0; }else{ return 1+M原创 2021-02-21 21:32:50 · 55 阅读 · 0 评论 -
12数值的整数次
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。保证base和exponent不同时为0示例1输入复制2,3返回值复制8.00000考虑负数的存在第一种解法:无脑逻辑匹配就好了 public double Power(double base, int exponent) { if(exponent==0){ return 1.0; .原创 2021-02-21 21:03:18 · 76 阅读 · 0 评论 -
11:二进制中1的个数
负数用32位的补码表示正数:原码==反码==补码负数:反码:原码符号位不变,其余位取反;补码:反码加1输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。示例1输入复制10返回值复制2第一种流氓解法借助Integer.toBinaryString(n)转换为二进制字符串 public int NumberOf1(int n) { //负数用补码表示// 1、首先求出负数的原码,如-8的原码...原创 2021-02-21 20:47:48 · 323 阅读 · 0 评论 -
44 :翻转单词顺序列
输入复制"nowcoder. a am I"返回值复制"I am a nowcoder."第一种解法:借助split分离句子,存进一个List里,然后翻转拼接为新的字符串 public String ReverseSentence(String str) { ArrayList<String> al =new ArrayList<>(); for(String s:str.split(" ")){原创 2021-02-19 21:01:57 · 72 阅读 · 0 评论 -
数组中次数出现超过一半的数字
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。第一种解法双层for循环遍历 public int MoreThanHalfNum_Solution(int [] array) { for(int i=0;i<array.length;i++){ int num=1;原创 2021-02-19 19:07:24 · 58 阅读 · 0 评论 -
51:构建乘积数组
给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]。不能使用除法。(注意:规定B[0] = A[1] * A[2] * ... * A[n-1],B[n-1] = A[0] * A[1] * ... * A[n-2];)对于A长度为1的情况,B无意义,故而无法构建,因此该情况不会存在。第一种解法双层for遍历呗 public int[] multip原创 2021-02-18 12:03:53 · 50 阅读 · 0 评论 -
42:和为S的两个数字
题目描述输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。返回值描述:对应每个测试案例,输出两个数,小的先输出。第一种解法双层for循环遍历保存最小的呗 public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) { ArrayList<Integer> result = new Ar原创 2021-02-18 10:40:11 · 77 阅读 · 0 评论 -
11 中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1.
public class Solution { public int FirstNotRepeatingChar(String str) { for(int i=0;i<str.length();i++){ boolean flag=false; for(int j=0;j<str.length();j++){...原创 2019-11-25 16:23:13 · 296 阅读 · 0 评论 -
10: 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字
//num1,num2分别为长度为1的数组。传出参数//将num1[0],num2[0]设置为返回结果public class Solution { public void FindNumsAppearOnce(int [] array,int num1[] , int num2[]) { int num=0; for(int i=0;i<arr...原创 2019-11-25 15:45:15 · 169 阅读 · 0 评论 -
9:例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续子序列的和
public class Solution { public int FindGreatestSumOfSubArray(int[] array) { int sum=array[0]; for(int i=1;i<=array.length;i++){//表示子数组长度 for(int j=0;j<=array.len...原创 2019-11-25 15:12:28 · 202 阅读 · 0 评论 -
8:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)
public class Solution { public int JumpFloor(int target) { if(target==1) return 1; if(target==2) return 2; int sum=2; if(target>2){ ...原创 2019-11-24 23:48:24 · 206 阅读 · 0 评论 -
6:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转
public class Solution { public int minNumberInRotateArray(int [] array) { int min=array[0]; for(int i=1;i<array.length;i++){ if(array[i]<min) min...原创 2019-11-24 23:30:12 · 228 阅读 · 0 评论 -
7:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。
public class Solution { public int Fibonacci(int n) { if(n==0) return 0; if(n==1) return 1; int sum=0; if(n>=2){ sum+=Fibona...原创 2019-11-24 22:59:44 · 849 阅读 · 0 评论 -
3:输入一个链表,,按链表从尾到头的顺序返回一个Array List。
/*** public class ListNode {* int val;* ListNode next = null;** ListNode(int val) {* this.val = val;* }* }**/import java.util.ArrayList;import...原创 2019-11-24 22:40:36 · 77 阅读 · 0 评论 -
2:请实现一个函数,将一个字符串中的每个空格替换成“*20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We *20 Are *20 Happy。
public class Solution { public String replaceSpace(StringBuffer str) { String a=str.toString(); String b=a.replaceAll(" ","%20"); return b; }}public class Solution...原创 2019-11-24 22:09:37 · 323 阅读 · 0 评论 -
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
public class Solution { public boolean Find(int target, int [][] array) { try{ if(array[0][0]>target) return false; if(array[array.length-1][array[0].length...原创 2019-11-24 21:46:57 · 123 阅读 · 0 评论