- 博客(19)
- 收藏
- 关注
原创 #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
154
原创 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
118
原创 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
99
原创 负数,二进制,补码,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
781
原创 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
101
原创 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
97
原创 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
96
原创 知识图谱记录
起源 web中的知识图谱 搜索引擎的进步: 从链接文本(string text document)到链接数据(object concept things data) 链接的类型: 通过不同的语义关系链接 提出: Google公司率先提出知识图谱(Knowledge Graph,KG)的概念,表示将在其搜索结果中加入知识图谱的功能。 发展历史 重要文章: -科学美国人 Semantic web ...
2021-06-18 16:36:52
150
原创 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
99
原创 34#第一个只出现一次的字符
题意 找出字符串中第一个只出现一次的字符,返回下标 思路 第一次遍历,用map计数 第二次找计数值等于1的 知识 map计数代码: map.put(str.charAt(i),map.getOrDefault(str.charAt(i),0)+1); String 转换char str.charAt(i) import java.util.*; public class Solution { public int FirstNotRepeatingChar(String str) {
2021-06-17 18:50:49
100
原创 48#不用加减乘除做加法
题意 题目所示 知识 原反补码 正数原反补相同 负数: 反码是原码除符号位之外取反 补码是反码加一 符号位 高位为符号位:1为负数 位运算 按位& ^ | 涉及负数都转化为补码 位运算在加法模拟中的应用/使用技巧 用& 和 <<一位 代表进位结果 用^求无进位结果 思路 用& 和 <<一位代表进位 用^求无进位结果 循环直至进位为0 public class Solution { public int Add(int
2021-06-17 11:24:01
154
原创 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
94
原创 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
89
原创 16#合并两个排序的链表
题意: 输入两个单调递增的链表,输出两个链表合成后的链表,合成后的链表单调不减。 思路: 模拟链表操作 两个指针分别指向两个链表 比较当前位置的大小 选中小的加入新链表并下移 代码思路: 节点变量:head保存函数返回的新链表指针 before(应该改成last)用于新链表加入新节点时找到当前末尾节点 list1 list2指向两个节点未处理的节点位置 初始化头节点 当两个链表都不为空时,循环比较大小,选取新加入的节点。 有一个为空时,将余下节点加入 注意 判断条件的空指针异常 /* public cla
2021-06-17 11:02:03
137
原创 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
154
原创 06#旋转数组的最小数字
题意: 给定一个非递减数组,将前面一部分元素搬到后面 找出最小元素 思路: 找第一个非递减数字(a[i]>a[i+1]) i+1就是所求。 特例/边界: 不递增:{1,1,1,1}//返回第一个数 没有搬动:{1,2,3,4}//返回第一个数 空数组:{}//返回0 import java.util.ArrayList; public class Solution { public int minNumberInRotateArray(int [] array) { if(a
2021-06-17 10:41:03
97
原创 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
91
原创 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
87
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅