自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(47)
  • 资源 (1)
  • 收藏
  • 关注

原创 剑指 43

题目思路1.最高位1出现的次数 如果最高位为1,那么出现次数就是后4位的值 + 1 不为1,那么出现次数就是10^(10的后4位)2.后几位出现的1的次数,最高位的值 * 后几位的排列组合(位数 * 10^位数-1 )题解class Solution { public int countDigitOne(int n) { return getCount(String.valueOf(n), 0); } private int getCount(

2021-09-10 20:28:08 97

原创 剑指 42

题目连续数组的最大和题解1.如果和<=0,直接放弃,从下一个数开始重新计算2.如果和大于0,遇到的下一个数是负数,加上此数之后的sum 和 此数 做比较,如果小,则直接放弃。3.其他情况正常连接下一个数据,注意:需将上一次的最大值和当前最大值做比较,取最大。这个是自己忽略的一个点优化:只要小于0,就重新开始大于0,就进行累加,但是会和上一次的sum进行比较,取最大遍历完成后返回代码class Solution { public int maxSubArray(int[]

2021-08-30 17:54:45 87

原创 剑指 41

剑指 Offer 41. 数据流中的中位数题目:思路:求中位数,使用最大堆和最小堆都为空或一个为空,应该怎么向两个堆里放值都不为空该怎么放入放完后判断size,使得size的差距不要超过1,这样就可以计算中位数注意:此算法中不能使用BigDecimal注意等号的位置(上次刷这道题还是1月前,今天看发现是等号写错了,导致过不了)题解:/** initialize your data structure here. */ public MedianFinder() { this

2021-08-28 18:14:43 73

原创 剑指 40

剑指 Offer 40. 最小的k个数题目思路将快排进行改造,只排序最小的(最左边)的k个数即可,时间复杂度O(n)顺便复习下快排:二路:public static void main(String[] args) { int[] a = {38, 99, 5, 11, 11, 78, 11, 4, 11, 456}; System.out.println(Arrays.toString(a)); sort(a, 0, a.length-1); System.o

2021-07-13 00:28:56 62

原创 剑指 39

剑指 Offer 39. 数组中出现次数超过一半的数字题目:思路:1.排序,中位数必定是过半的数字,时间复杂度O(nlogn)。2.HashMap,这个是最先想到的3.分治4.摩尔投票法,yyds如何理解摩尔投票法:题解:摩尔题解:class Solution { public int majorityElement(int[] nums) { int num = nums[0]; int count = 0; for (int

2021-06-30 00:24:01 41

原创 剑指 38

题目:思路:使用递归,第一个数字和后面的每一个数字交换一次,第二个数字同。代码:class Solution { public String[] permutation(String s) { if(s == null || s==""){ return null; } char[] chars = s.toCharArray(); int a = 0; String[] strings

2021-06-29 00:32:10 64

原创 剑指 37

剑指 Offer 37. 序列化二叉树题目:思路:自定义序列化方式,采用先序遍历的房子,如果节点为null则置为一个字符,这样一个序列就搞定了,不像一个先序+中序进行恢复二叉树(而且不能有重复数据)1.序列化,定义了一个全局变量,作为返回2.反序列化,使用数组定义全局变量就跟昨天说的引用传递一样,以后还是尽量避免这种类C++的写法。最后改成了ddfs,返回TreeNode。代码:/** * Definition for a binary tree node. * public clas

2021-06-27 14:49:48 30

原创 再谈值传递和引用传递

java中只有值传递,基本类型:值直接保存在变量中引用类型:变量中保存的是对象的地址从第一次接触这个问题到现在,知乎两个回答已经看的好几遍了,但是没有真正的理解,所以才会重复的看很多遍,今天刷到剑指第36题的时候,又遇到了这个问题,所以要一次性把这个问题搞懂:这个是第一次的写法:这个是第二次的写法:其实就想是想在递归的时候直接给参数赋值,但是第一种方法两个局部变量一直返回的是null,最后改成全局变量就是可以的,第一种方法时不行的,明显是值传递和引用传递没有搞清楚才产生的问题。先说结论:

2021-06-27 01:25:12 48

原创 剑指 36

剑指 Offer 36. 二叉搜索树与双向链表题目:思路:1.链表有序,所以要使用中序遍历(顺便复习下先序和后续)2.根节点和左子树的最大值相连,和右子树的最小值相连3.维持一个head和last,每次递归的时候我们只需要维持尾节点即可,/*// Definition for a Node.class Node { public int val; public Node left; public Node right; public Node() {}

2021-06-27 00:30:46 60

原创 剑指 35

剑指 Offer 35. 复杂链表的复制题目:思路:1.空间换时间,第一遍遍历,将next组装,并将Node,NodeCopy,放入map中,第二遍遍历时,关键代码root.random = map.get(head1.random);1.1.自己的代码有点丑,看了题解,优化下自己的代码。思路是类似的,不过将第一步的next放到了第二部的构建中进行,变量也少了。 推荐!!!2.不使用额外的空间。思路:1.复制拼接2.构建random3.拆分这个题的重点就是random是随机的,不能立刻获

2021-06-05 00:42:53 74

原创 剑指 34

剑指 Offer 34. 二叉树中和为某一值的路径题目:思路:1.每次不对都要回到上一个节点?——使用stack保存,因为要遍历,所以使用Deque2.Queue保存TreeNode,不对,removeLast3.属于回溯法题解/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; *

2021-06-04 00:37:05 43

原创 剑指 33

剑指 Offer 33. 二叉搜索树的后序遍历序列题目:思路:没有考虑全面导致1.多次提交失败,每次都拿失败的用例去改。。。2.虽然提交通过,但是代码逻辑混乱,思路不变,代码可以优化思路:后续遍历序列最后一个必是根节点,从始至终,比其小的为左子树,比其大的为右子树。假设k为临界值,那么k之后的元素都必须比root大,否则返回false。最后reture 前 && 后 即可(其实还有,都比根节点小和都比根节点大的情况,这两者直接return length-1即可)题解:c

2021-06-01 23:58:09 67 3

原创 剑指 32

题目:以三种方式广度优先遍历二叉树:三种方式:1.一行打印2.多行打印3.多行之字打印思路:一行打印:queue多行打印:1.queue+两个int(一个记录每一行放入的个数,一个记录每行poll后剩余的个数),当pollInt为0时,就换行打印。将offerInt 赋予 pollInt,然后重新计数2.queue,使用fori queue.size进行换行——每次放完某一行后,这一行刚好是queue.size()多行之字打印:1. 双stack+三int。相比于多行打

2021-05-30 22:48:06 68 1

原创 剑指 31

剑指 Offer 31. 栈的压入、弹出序列题目:思路:看了剑指的思路做的,虽然代码不一样,但是代码都显得乱。简单说下思路:思路一:1.按照push的顺序往stack中push,知道poped[0]2.然后进行stack.pop,如果poped[0++]和stack.peek() 不相等了。那么在pushed里接着找peek,没找到就退出,找到就向1一样,继续往stack中放置3.注意:思路就是这个思路,自己写的时候一直没有对pushed的位置进行判断导致一直提交报错,睡了一觉,多加了一个参

2021-05-29 23:22:05 51

原创 剑指 30

剑指 Offer 30. 包含min函数的栈题目:思路:无论使用哪种数据结构,最重要的就是每次push,都对应一个min,这样pop的时候就不会有问题。解答:双栈class MinStack { /** * initialize your data structure here. */ private Stack<Integer> stack; private Stack<Integer> minStack; pub

2021-05-29 12:38:08 46

原创 剑指 29

剑指 Offer 29. 顺时针打印矩阵题目:思路:遍历,没什么说的。刚开始自己使用while,没写出来。用for循环简单点。参数也少题解:class Solution { public int[] spiralOrder(int[][] matrix) { if (matrix.length <= 0) { return new int[0]; } int iMax = matrix.length -1;

2021-05-29 11:26:32 64

原创 剑指 28

剑指 Offer 28. 对称的二叉树题目:思路:思路:自己犯了两个错误:1.置换后进行下级比较,这样是不行的,一直比较的是置换前的2.在第一种方案不行之后,使用保留root,再反转后进行比较,但是是同一个对象,两者还是相同的(为什么ListNode是可以的)3.使用现有方案:左和右进行比较``java/**Definition for a binary tree node.public class TreeNode {int val;TreeNode left

2021-05-26 16:57:46 33

原创 剑指27

剑指 Offer 27. 二叉树的镜像题目:思路:直接递归,没啥说的题解:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { public TreeNode m

2021-05-26 00:31:08 42

原创 剑指 26

剑指 Offer 26. 树的子结构题目:思路:1、两个值相等怎么办?–相等了,继续往下比较,接下来有一个不相等,回到起点和A树的左右节点进行比较。–相等的话,下面要一直用&&2、两个值不想等怎么办?–不想等,上面说了,用||。3、树结构——递归!注意:1.不相等,要回到起点进行比较2.相等和不想等的跳出条件不一样。题解:/** * Definition for a binary tree node. * public class TreeNode { *

2021-05-26 00:15:13 47

原创 剑指23

题目:返回链表中环的入口节点:(leetcode 142)思路:1.求得位于环中的某个节点2.通过这个节点的next求的环的长度n3.双指针,fast指针先移动n个位置,此时,fast和head同时移动,他们首次相遇的位置就是环的入口节点这个我写的时候,fast = fast.next,如果和2.1类似,那么就不用中间计算长度的过程了!还有一种思路:1.都从head开始走,fast每次走两步,slow每次走一步。最终相遇2.head从头走,meet从此处开始走,每次走一步,最终相遇点就是

2021-05-23 23:37:25 75

原创 剑指25

剑指 Offer 25. 合并两个排序的链表题目:思路:递归,但是要注意:// 刚开始比较后,直接将大的放在后面,这样是错误的,大的还要和小的 的 next进行比较。这样就麻烦了。// 直接连接一次,直接返回head.next就行。后面无所谓。这样就不用考虑那么麻烦了。代码:/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; *

2021-05-23 20:37:52 45

原创 剑指24

剑指 Offer 24. 反转链表题目:思路:1.用temp存放head.next,再变换指针2.递归(想不出来,后面继续看看)题解:/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */class Solution { public Li

2021-05-21 22:52:48 25

原创 剑指22

剑指 Offer 22. 链表中倒数第k个节点题目:思路:1.倒数第k,正数第length-k+12.维持两个指针,使得两个指针的距离为k,当第一个指针走到最后一个节点时,第二个指针指向的就是倒数第k个节点。代码:/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; }

2021-05-20 00:28:41 28

原创 剑指21

剑指 Offer 21. 调整数组顺序使奇数位于偶数前面题目:思路:一次遍历,没什么说的。剑指offer上还给出了另一种解法:1.首尾同时开工2.将判断逻辑提成一个公共方法,这样就可以不只是判断奇数偶数,还可以正负等(高级)代码:class Solution { public int[] exchange(int[] nums) { int i = 0; int j = nums.length - 1; int temp = 0;

2021-05-20 00:08:54 51

原创 剑指18

剑指 Offer 18. 删除链表的节点题目:思路:将下一个节点的值和next给予此节点,就相当于把这个节点删除掉,不要忘记考虑边界代码:/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */class Solution { public L

2021-05-19 00:41:49 34

原创 剑指17

剑指 Offer 17. 打印从1到最大的n位数题目:思路:主要是考察大数的加法和打印,有两种思路,推荐递归(从char[0]到char[length-1] 从0到9即可。然后再if条件处进行打印即可)leetcode这道题竟然返回int[],真的垃圾,还尼玛标记简单。class Solution { public int[] printNumbers(int n) { char[] s = new char[n]; int temp = n;

2021-05-19 00:06:48 46

原创 剑指16

剑指 Offer 16. 数值的整数次方题目:思路:当时像剪绳子中的贪婪算法中的pow一样计算,但是遇到1.00的2147483647,直接超出限制,所以使用递归将2147483647 进行 >> 1 拆分。class Solution { public double myPow(double x, int n) { if (n == 0) { return 1; } else if (n == 1) {

2021-05-16 18:43:40 43

原创 剑指15

剑指 Offer 15. 二进制中1的个数题目:思路:位运算的知识:利用>>>(使用>>会超出时间限制,没搞懂)代码:public class Solution { // you need to treat n as an unsigned value public int hammingWeight(int n) { int count = 0; while (n != 0) { // 与1做

2021-05-16 13:03:25 49

原创 剑指offer14-2

剑指 Offer 14- II. 剪绳子 II题目:思路:区别于DP,使用贪婪算法。3就是最贪婪的,但是对于4,不能使用33,而是要使用22,所以进行了特殊处理。注意:代码的实现,根据题意还是要考虑边界问题,可以在以下两点进行思考:1.是不是要使用long2.在那个位置进行取模是绝对正确的代码:class Solution { public int cuttingRope(int n) { if (n == 2) { return 1;

2021-05-15 23:15:06 52

原创 剑指14

剑指 Offer 14- I. 剪绳子题目:思路:第一次接触动态规划,通常是应用于求最优解(这个是最大值)动态规划的三个特点:1、求最优解(这里是求成绩的最大值)2、整体问题的最优解依赖于各个子问题的最优解。(对方10分解,分解为4和6。再对4和6进行分解)3、各个小问题之间还有有相互重叠的部分。(10=46,6=42)4、从上往下分析,从下往上求解(类似于递归求解斐波那契,有重叠的部分,从下往上可以避免重复计算)从4向上一次计算+1,+1,子问题的最优解都存放于数组中。题解:cla

2021-05-14 00:07:44 117

原创 剑指13

剑指 Offer 13. 机器人的运动范围题目:思路:和12题的回溯法类似。第一次错直接双for,对于16,8,4,直接算出25个,将10 0,……也算进去了,但是从0开始根本不能达到,所以还是要dfs。代码:class Solution { public int movingCount(int m, int n, int k) { boolean[][] valite = new boolean[m][n]; int count = dfs(0, 0,

2021-05-11 18:38:10 56

原创 剑指offer12

剑指 Offer 12. 矩阵中的路径题目:思路:主要是对矩阵进行搜索类,可以使用回溯法,主要思想就是由某一个点,向其他方向进行递归。代码:class Solution { public boolean exist(char[][] board, String word) { boolean[][] valite = new boolean[board.length][board[0].length]; char[] chars = word.toChar

2021-05-11 12:50:05 129

原创 剑指11

题目:剑指 Offer 11. 旋转数组的最小数字思路:暴力破解:只要nums[i+1] < nums[i],那么num[i]就是最小的二分法:对于有序或局部有序的数组,可以考虑二分法。1.因为是数组的旋转,所以一直和high位进行比较2.mid > high:最小值肯定在右侧3.< 肯定在左侧,但是不能high = mid -1,因为mid有可能是最小的,所以要多考虑临界元素4.= 要考虑重复元素的情况,high–,如[3,3,3,3,3,3,3,0,3,3]代码

2021-05-09 11:17:56 50

原创 2021-05-08

剑指 Offer 10- I. 斐波那契数列题目:思路:递归肯定是不行的,重复计算,将前n-1 和 n-2的值保存起来fori 计算即可。没有审题清楚,没有取模导致一直提交失败,还有取模的位置,要在相加后取模代码:class Solution { //0,1,1,2,3,5,8,13,21,34,55... public int fib(int n) { if (n == 0) { return 0; } i

2021-05-08 23:33:39 42

原创 剑指09

剑指 Offer 09. 用两个栈实现队列题目:思路:两个栈:一个进栈,一个出栈1.进栈负责push2.当出栈空,进栈不为空时,将进栈中的pop,push到出栈。。再pop3.都为空时返回-1;代码:class CQueue { private Stack<Integer> stack1 = new Stack(); private Stack<Integer> stack2 = new Stack(); public CQueue()

2021-05-08 22:36:01 31

原创 剑指06

剑指 Offer 06. 从尾到头打印链表题目:输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2]输出:[2,3,1]限制:0 <= 链表长度 <= 10000思路:1.没有多想,直接倒序插入值到数组中2.先进后出,直接使用Stack题解:/** * Definition for singly-linked list. * public class ListNode { * int val; *

2021-05-06 20:00:49 30

原创 剑指07

剑指 Offer 07. 重建二叉树题目:输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树:3/ 9 20/ 15 7限制:0 <= 节点个数 <= 5000思路:1.先序数组的首位是根节点,根节点在中序数组中左边的是左子树,右边的是右子树。2.root+

2021-05-06 19:02:57 37

原创 剑指05

剑指 Offer 05. 替换空格题目:请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1:输入:s = “We are happy.”输出:“We%20are%20happy.”限制:0 <= s 的长度 <= 10000思路:1.new 一个新的字符串:看见这个结果,直接淘汰。应该是S一直在new,使用StringBuffer试试,结果和char数组是类似的。2.new char数组,跟StringBuffer是类似的3.正则表达式各项的结果:

2021-05-05 16:41:02 32

原创 剑指04

剑指 Offer 04. 二维数组中的查找题目:在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例:现有矩阵 matrix 如下:[[1, 4, 7, 11, 15],[2, 5, 8, 12, 19],[3, 6, 9, 16, 22],[10, 13, 14, 17, 24],[18, 21, 23, 26, 30]]给定

2021-05-05 15:43:28 40

原创 剑指3

剑指 Offer 03. 数组中重复的数字题目:找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3限制:2 <= n <= 100000思路:有多种方法:1.先排序,再遍历2.额外使用一个map最优:改变数组中数据的位置:因为限制了a[

2021-05-04 22:14:02 35

策略模式与模板模式的区别 - Eviltuzki的个人页面 - OSCHINA - 中文开源技术交流社区.mht

策略模式与模板模式的区别 - Eviltuzki的个人页面 - OSCHINA - 中文开源技术交流社区.mht

2021-06-28

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除