剑指offer
学理知书广人网
这个作者很懒,什么都没留下…
展开
-
#27 #28 #55I #54 #55II #68I #68II
递归的模式--自顶向下调用1.递归结束条件2.递归调用3.每一层执行的内容4.返回二叉树的镜像思路:1.递归结束条件:节点为空,返回自己2.递归调用:变量暂存结果,防止递归途中改变了结构3.每一层执行的内容:交换左右节点4.返回:返回左右调换后的节点代码: public TreeNode mirrorTree(TreeNode root) { if(root==null)return null; TreeNode leftChild=mirrorTre原创 2021-06-27 17:23:41 · 88 阅读 · 0 评论 -
简单 字符串操作相关 #05 #58I #58II
知识点字符串操作API原创 2021-06-27 16:24:45 · 56 阅读 · 0 评论 -
JZ13 调整数组顺序使奇数位于偶数前面
题意奇数在前,偶数在后,相对顺序不变思路模拟int[] 转存 到 List中 ;标记第一个偶数的位置,在其后的奇数插入到该位置,并删除原本位置的数更新第一个偶数的位置知识点利用List进行便捷的指定位置插入和删除list.add(index,num)list.get(index)list.remove(index) public int[] reOrderArray (int[] array) { List<Integer>list=new Arra原创 2021-06-27 15:21:35 · 54 阅读 · 0 评论 -
JZ1 二维数组中的查找
题意二维数组;每一行都按照从左到右递增的顺序排序;每一列都按照从上到下递增的顺序排序;查找某个值是否存在思路从右上角开始查找往下每个数都变大往左变小public class Solution { public boolean Find(int target, int [][] array) { int rows=array.length,cols=array[0].length; int moveToMinx=0,moveToMiny=-1,moveTo原创 2021-06-27 15:12:53 · 58 阅读 · 0 评论 -
负数,二进制,补码,int的范围
负数的补码补码规律:除符号位外,数字越大对应负的越小以32位有符号数为例:全1为 -1 的补码:1111 1111,1111 1111, 1111 1111,1111 1111 “-1”补码全零(符号位1)为最大负数(2^31)的补码: 1000 0000, 0000 0000, 0000 0000, 0000 0000 “-2147483648”补码负数与整数构成一个循环即最小负数 再 减一 等于 最大整数:int的范围-2^31 ~~ (2^31)原创 2021-06-27 09:55:29 · 548 阅读 · 0 评论 -
JZ11 二进制中1的个数
题意求int补码中1的个数思路用&运算 取出每一位的最左边的数字然后右移if ((n&1)==1)n>>1;问题:负数右移最高位补1改进:比较位左移而不改变原数字public int NumberOf1(int n) { int ans=0; int temp=0x01; while (temp!=0){ if((n&temp)!=0)ans++; temp=te原创 2021-06-27 09:54:40 · 58 阅读 · 0 评论 -
JZ47 求1+2+3+...+n
题意不用循环,乘法,判断语句实现求和思路用递归代替循环用逻辑与代替递归结束判断A&&B ,A为递归结束条件,来决定B是否执行public class Solution { public int Sum_Solution(int n) { boolean x=n>1&&((n+=Sum_Solution(n-1))>0); return n; }}...原创 2021-06-27 09:49:31 · 52 阅读 · 0 评论 -
知识图谱记录
起源web中的知识图谱搜索引擎的进步:从链接文本(string text document)到链接数据(object concept things data)链接的类型:通过不同的语义关系链接提出:Google公司率先提出知识图谱(Knowledge Graph,KG)的概念,表示将在其搜索结果中加入知识图谱的功能。发展历史重要文章:-科学美国人 Semantic web...原创 2021-06-18 16:36:52 · 86 阅读 · 0 评论 -
38#二叉树的深度
题意给一个二叉树求深度思路1、空节点返回层数为0;2、返回本层深度:非空节点深度=左右节点中最大层数+1;/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/public class Solution { pu原创 2021-06-18 16:37:38 · 51 阅读 · 0 评论 -
18#二叉树的镜像
题意二叉树左右子树逆转思路递归1、空节点时返回,2、递归左节点 和右节点 注意用变量暂存结果3、递归完成 将左右节点赋值4、返回本节点给上层注意自下而上反转 先递归 后赋值临时变量存结果import java.util.*;/* * public class TreeNode { * int val = 0; * TreeNode left = null; * TreeNode right = null; * public TreeNode(int val原创 2021-06-17 19:26:14 · 51 阅读 · 0 评论 -
34#第一个只出现一次的字符
题意找出字符串中第一个只出现一次的字符,返回下标思路第一次遍历,用map计数第二次找计数值等于1的知识map计数代码:map.put(str.charAt(i),map.getOrDefault(str.charAt(i),0)+1);String 转换charstr.charAt(i)import java.util.*;public class Solution { public int FirstNotRepeatingChar(String str) {原创 2021-06-17 18:50:49 · 58 阅读 · 0 评论 -
48#不用加减乘除做加法
题意题目所示知识原反补码正数原反补相同负数:反码是原码除符号位之外取反补码是反码加一符号位高位为符号位:1为负数位运算按位& ^ | 涉及负数都转化为补码位运算在加法模拟中的应用/使用技巧用& 和 <<一位 代表进位结果用^求无进位结果思路用& 和 <<一位代表进位用^求无进位结果循环直至进位为0public class Solution { public int Add(int原创 2021-06-17 11:24:01 · 97 阅读 · 0 评论 -
28#数组中出现次数超过一半的数字
题意求数组的众数思路一次循环map记录出现次数并更新当前出现次数最多的值知识Map<Integer,Integer> hashMap=new HashMap<Integer,Integer>();hashMap.put(var,hashMap.getOrDefault(var,0)+1);代码import java.util.HashMap;import java.util.Map;public class Solution { public int原创 2021-06-17 11:15:12 · 51 阅读 · 0 评论 -
20#包含min函数的栈
题意:实现求最小值 且 操作时间复杂度都是 O(1) 的栈push(value):将value压入栈中pop():弹出栈顶元素top():获取栈顶元素min():获取栈中最小元素知识:Stack<>s=new Stack<Integer>();s.isEmpty();s.push(node);s.peek()help.pop();思路:辅助栈记录入栈顺序中的不递增数字。即栈顶维护当前最小值。出栈数字是辅助栈顶数字时,辅助栈顶也需要出栈。入栈时判断是原创 2021-06-17 11:10:43 · 48 阅读 · 0 评论 -
16#合并两个排序的链表
题意:输入两个单调递增的链表,输出两个链表合成后的链表,合成后的链表单调不减。思路:模拟链表操作两个指针分别指向两个链表比较当前位置的大小 选中小的加入新链表并下移代码思路:节点变量:head保存函数返回的新链表指针before(应该改成last)用于新链表加入新节点时找到当前末尾节点list1 list2指向两个节点未处理的节点位置初始化头节点当两个链表都不为空时,循环比较大小,选取新加入的节点。有一个为空时,将余下节点加入注意判断条件的空指针异常/*public cla原创 2021-06-17 11:02:03 · 44 阅读 · 0 评论 -
09#跳台阶扩展问题
题意:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。思路:n=1,ans=1;n>1,ans=ans(跳到n-1)+ans(跳到n-2)+…+ans(跳到1)=前面累加和+1代码思路:从1阶情况循环计算 累加到n两个变量:next记录当前的方法数,sum记录前面的累加和next=sum+1;进入下一个循环前再用sum+=next更新累加值import java.util.ArrayList;public class原创 2021-06-17 10:50:01 · 54 阅读 · 0 评论 -
06#旋转数组的最小数字
题意:给定一个非递减数组,将前面一部分元素搬到后面找出最小元素思路:找第一个非递减数字(a[i]>a[i+1]) i+1就是所求。特例/边界:不递增:{1,1,1,1}//返回第一个数没有搬动:{1,2,3,4}//返回第一个数空数组:{}//返回0import java.util.ArrayList;public class Solution { public int minNumberInRotateArray(int [] array) { if(a原创 2021-06-17 10:41:03 · 49 阅读 · 0 评论 -
05#用两个栈实现队列
题意:用两个栈实现队列思路:入栈:往栈1中push出栈:栈2为空,则将栈1的元素pop()后 push到栈2栈2不空,则直接pop()import java.util.Stack;public class Solution { Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer> stack2 = new Stack<Integer>(); p原创 2021-06-17 10:32:19 · 44 阅读 · 0 评论 -
03#从尾到头打印链表
知识点:容器工具类:Collections反转List方法:Collections.reverse(List)/**public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/import java.util.ArrayList;import java.util.Collections原创 2021-06-17 10:24:59 · 49 阅读 · 0 评论