自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(44)
  • 收藏
  • 关注

原创 剑指offer52-字符流中的第一个不重复元素

最多有128种字符,弄一个数组来放。出现一次,该位置上的数就+1.用队列放当前唯一一个的值。import java.util.*;public class Solution { private int[] charMap = new int[128]; Queue<Character> queue = new LinkedList<>(); ...

2020-03-31 19:46:08 119

原创 剑指offer66-剪绳子

用动态规划public class Solution { public int cutRope(int target) { if(target<2){ return 0; } if(target==2){ return 1; } if(target==3...

2020-03-31 13:28:35 131

原创 剑指offer63-滑动窗口的最大值

这题其实最简单的思路是直接循环,每个窗口都计算他的最大值,但是牛客过不了。。超时了。然后就用了一个双端队列,存储目前的最大值。双端队列的大小为size,有一个新数之后,添加进去,要是再一个新数,比他大,直接替换当前队列最末端的。如果来一个新数小,就不添加。但是要注意里面的数有期限,最多维持size次。import java.util.*;public class Solution { ...

2020-03-31 13:00:35 94

原创 剑指offer62-数据流中的中位数

此题用堆来做比较简单。左边放一个大顶堆 右边放一个小顶堆当有新数据来的时候,两个堆循环着放。例如第一个数据,我们放到大顶堆,但是要注意,这个新的数据假如比小顶堆的最小值大,就要交换该数据和小顶堆的头部,让新数据成为小顶堆头部,原来的头部放到大顶堆中。下一个数据放到小顶堆,但是要注意,如果这个新的数据比大顶堆的最大值小,就要交换。import java.util.*;public c...

2020-03-31 11:30:49 82

原创 剑指offer61-二叉搜索树的第k个节点

二叉搜索树,某节点的左子树一定比他小,右子树一定比他大。若想找到第n小的数,首先我们想到的是将此二叉搜索树进行排序。排序的方法:只需中序遍历即可。import java.util.*;public class Solution { TreeNode KthNode(TreeNode pRoot, int k) { if(pRoot==null || k&l...

2020-03-31 10:17:05 91

原创 剑指offer56-二叉树的下一个节点

要找二叉树的中序遍历的下一个节点:首先判断该节点是不是有右子树,如果有右子树,那么他的下一个节点就是右子树的最左的节点。如果该节点没有右子树,就要找他的父节点,且如果该节点不是父节点的左子节点,就继续找父节点的父节点。直到找到为父节点的左子节点,那么那个父节点就是下一个节点。public class Solution { public TreeLinkNode GetNext(Tr...

2020-03-27 20:30:20 101

原创 剑指offer53-链表中环的入口节点

结论:找链表的入环节点,首先用两个指针,一个快指针,一个慢指针。快指针一次走两步,慢指针一次走一步,如果两个指针可以相遇,则是有环的。然后让快指针返回起点,两个指针都改成一步,则两个指针下次相遇的点就是入环点。public class Solution { public ListNode EntryNodeOfLoop(ListNode pHead) { //...

2020-03-27 20:10:55 70

原创 剑指offer48-数组中重复的数字

一种思路:弄一个新的数组,让对应位置放对应的值,如果再想放的时候,发现对应位置已经有了对应的值,就说明重复了。public class Solution { // 这里要特别注意~返回任意重复的一个,赋值duplication[0] public boolean duplicate(int numbers[],int length,int [] duplication) ...

2020-03-27 18:21:19 90

原创 剑指offer44-约瑟夫环问题

import java.util.*;public class Solution { public int LastRemaining_Solution(int n, int m) { List<Integer> kids = new ArrayList<>(); for(int i=0;i<n;i++){ ...

2020-03-27 18:14:05 168

原创 剑指offer42/43-左旋转字符串/翻转单词顺序列

循环左移,就考虑移动的位数和原长度的关系,如果移动的比较多,早就转了几圈了。所以先求个余数即可。把需要移动的添到后面,然后截取就行了。public class Solution { public String LeftRotateString(String str,int n) { int len = str.length(); if(len<1)...

2020-03-27 17:53:03 130

原创 剑指offer40/41-和为S的连续正数序列/和为S的两个数字

其实就是个窗口问题 left从1开始,right从2开始left最多能到num/2的位置,right最多能到小于num的位置。当前sum大于目标sum时,让left右移。import java.util.*;public class Solution { public ArrayList<ArrayList<Integer> > FindContinuo...

2020-03-26 21:18:56 80

原创 剑指offer39-只出现一次的数字

这个题 首先需要一些概念:1.相同的值异或之后为0;2.0和任何数异或之后数不变;3.通过n&1可以判断n的各位的数字代码如下://num1,num2分别为长度为1的数组。传出参数//将num1[0],num2[0]设置为返回结果public class Solution { public void FindNumsAppearOnce(int [] array,i...

2020-03-24 16:52:36 75

原创 剑指offer37-二叉树的深度/38-平衡二叉树

遍历 左子树的深度 右子树的深度 较大的深度+1即为二叉树深度public class Solution { public int TreeDepth(TreeNode root) { //空树为0 if(root == null){ return 0; } //如果不是空树 是左树和右树较...

2020-03-24 15:55:47 68

原创 剑指offer36-数字在排序数组中出现的次数

首先用二分查找,找到index的位置然后从该位置,向左向右移动,找到相同的值。import java.util.*;public class Solution { public int GetNumberOfK(int [] array , int k) { int index = Arrays.binarySearch(array,k); if(in...

2020-03-24 15:37:47 64

原创 剑指offer35-两个链表的公共节点

首先弄清楚两个链表的长度,然后让长的链表先走,走到剩下长度相等的时候,两个链表再一起走,直到找到公共节点。public class Solution { public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) { if(pHead1==null || pHead2 == null){...

2020-03-24 14:58:46 75

原创 剑指offer34-数组的逆序对

用归并排序来做即可。递归mergesort,最后mergepublic class Solution { private long sumcount = 0; public int InversePairs(int [] array) { int[] temp = new int[array.length]; mergeSort(array,0,...

2020-03-24 14:02:53 71

原创 剑指offer33-第一个只出现一次的字符

在这个题当中,我们弄了一个额外数组,遍历字符串,在数组的对应ascii码的位置数字+1,最后遍历完之后,看数组哪个地方为1,返回即可import java.util.*;public class Solution { public int FirstNotRepeatingChar(String str) { int[] arr = new int[256]; ...

2020-03-24 14:00:56 65

原创 剑指offer32-丑数

这个题要把丑数排序,最开始是1,然后*2,3,5,得到2 3 5 ,找到最小的为2,因此2就是下一个丑数。然后比较1 3 5,和22,这样找到3,然后再是15和22,23,依次类推。public class Solution { public int GetUglyNumber_Solution(int N) { if (N <= 6) r...

2020-03-24 13:53:45 69

原创 剑指offer31-把数组排成最小的数

很简单,只要让他们组合之后,小的在前面。需要重写一个比较器,比较器的内容是(O1+O2).compareTo(O2+O1)注意必须是字符串的比较import java.util.*;public class Solution { public String PrintMinNumber(int [] numbers) { String[] str = new S...

2020-03-24 13:17:01 107

原创 剑指offer28-最小的k个数

找到最小的k个数,用大顶堆的方法。弄一个长度为k的大顶堆,当全部遍历完之后,留在大顶堆内部的即为最小的k个。在遍历过程中,如果比当前大顶堆的最大值小,就弹出,换这个新的。import java.util.*;public class Solution { public ArrayList<Integer> GetLeastNumbers_Solution(int [] i...

2020-03-24 12:53:13 70

原创 剑指offer27-数组中出现次数超过一半的数字

最简单的办法:可以直接先排序 复杂度nlogn或者我们可以使用候选的方法先把第一个数当作候选,给他一个初始次数为1,往后遍历,如果是相同的,则次数加1.如果不同,则次数减一。当次数减为0之后,候选的数移动到当前遍历的位置。最后将整个数组遍历完之后,谁是候选的数,谁就是次数最多的数。注意:还要最后考虑一下,最多的数是不是超过了一半。import java.util.*;public c...

2020-03-24 12:22:11 54

原创 剑指offer25-二叉搜索树与双向链表

首先是让转化成一个排序的给的是二叉搜索树,所以只需要将其中序遍历,得到的就是排序好的。然后只要再把中序遍历的数组转化为双向链表即可。import java.util.*;public class Solution { public TreeNode Convert(TreeNode pRootOfTree) { if(pRootOfTree == null){ ...

2020-03-23 21:41:22 60

原创 剑指offer24-复杂链表的复制

实现复制另一个链表,用的就是hashmap让这个链表和我们复制之后的链表,分别作为key和valueimport java.util.*;public class Solution { HashMap<RandomListNode,RandomListNode> map = new HashMap<>(); public RandomListNode...

2020-03-23 21:22:48 70

原创 剑指offer23-二叉树中和为某一个值的路径

这个题也是用递归的思路来做的,从根节点开始,弄一个sum,和目标值比较,然后依次左右,直到叶结点。且总和相等。如果中途sum就超过了target,就直接舍弃这一条路。public class Solution { public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int target) {...

2020-03-23 21:04:49 140

原创 剑指offer22-二叉搜索树的后序遍历序列

首先要知道什么是二叉搜索树,就是对于任何一个节点,左子树永远比他小,右子树永远比他大。然后要看是不是后序遍历。首先找出最后一个数字,它就是根节点,然后根据大小,可以把左右子树都找出来,再用递归,分别在左右子树进行该操作。代码如下:import java.util.*;public class Solution { public boolean VerifySquenceOfBS...

2020-03-20 21:54:38 67

原创 code21-从上往下打印二叉树

采用一个队列先放入根节点,弹出根节点时候,添加其左右孩子,然后再弹出左孩子,再添加左孩子的左右孩子。弹一个添两个。直到最后队列全部弹出。public class Solution { public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) { ArrayList<Integer&gt...

2020-03-15 21:43:40 86

原创 剑指offer20-栈的压入、弹出序列

文字不知道咋说了…看代码吧 不难import java.util.*;public class Solution { public boolean IsPopOrder(int [] pushA,int [] popA) { if(pushA.length != popA.length){ return false; } ...

2020-03-15 21:31:19 48

原创 剑指offer19-包含min函数的栈

此题用一个辅助栈就可以实现了在往栈中压入数据时,data栈正常添加,min栈,若新数据小于当前栈顶元素,则压入新数据;若新数据小于当前栈顶元素,则再压入一个当前栈顶元素。import java.util.Stack;public class Solution { private Stack<Integer> stack = new Stack<>(); ...

2020-03-15 21:17:04 65

原创 springmvc中获取get请求、post请求、响应html数据、响应json数据

//GET请求 // /students?current=1&limit=20 @RequestMapping(path = "/students",method = RequestMethod.GET) @ResponseBody public String getStudents( @RequestParam(name =...

2020-03-14 13:29:48 1221

原创 牛客网oj判题系统的输入输出

1.计算两数之和import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while(sc.hasNext()){ int a = s...

2020-03-13 17:26:51 1520

原创 剑指offer18-顺时针打印矩阵

这个题其实就是先找左上角、右下角两个点,将最外侧圆圈先打印出来,然后将左上、右下各沿对角线往里运动,然后打印内圈。import java.util.ArrayList;public class Solution { public ArrayList<Integer> printMatrix(int[][] matrix) { int leftto...

2020-03-12 21:54:43 57

原创 剑指offer17-二叉树的镜像

用递归的方法来做,很简单public class Solution { public void Mirror(TreeNode root) { if(root == null){ return ; } TreeNode tmp = root.left; root.left = root.right;...

2020-03-12 10:29:38 52

原创 剑指offer16-树的子结构

判断一棵树是不是另一颗树的子树首先可以先判断根节点是否相同,找到根节点相同的之后,再判断其左右子树是否相同。当出现A树有某子节点,B树没有的时候,也有可能是true。反之不行public class Solution { public boolean HasSubtree(TreeNode root1,TreeNode root2) { if(root1==null...

2020-03-12 09:52:52 63

原创 剑指offer15-合并两个排序的链表

将两个单调递增的链表合并成一个单调不减的链表。思路:两个链表各给一个指针,比较大小,给一个新链表,小的就放到新链表,同时指针右移。如果有一个链表到头之后,就把另一个链表剩下的部分直接移过去。public class Solution { public ListNode Merge(ListNode list1,ListNode list2) { ListNode hea...

2020-03-11 21:33:24 67

原创 剑指offer14-反转链表

反转链表用了三个指针附上代码:public class Solution { public ListNode ReverseList(ListNode head) { if(head==null){ return null; } //三个指针 ListNode zuo = head; ...

2020-03-11 21:05:25 51

原创 剑指offer13-链表中倒数第k个节点

输入一个链表,输出该链表中倒数第k个结点。此题用双指针技术,首先先让第一个指针多走k-1步;然后两个同时向右走,当第一个指针到最右端时候,第二个指针所指的位置就是倒数第k个节点。public class Solution { public ListNode FindKthToTail(ListNode head,int k) { //单向链表 用双指针 距离为k-1...

2020-03-10 22:33:39 57

原创 剑指offer12-调整数组顺序使奇数在左 偶数在右

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。位置不变即要保证稳定性根据冒泡排序的思想来做这道题如果左边是偶数,右边是奇数,那么两个数就交换位置。一个for循环会找到一个最右边的偶数。在for之外再套一个forpublic class Solution { p...

2020-03-10 22:12:33 324

原创 剑指offer11-二进制中一的个数

这个题闹懂下面的就没问题了:如何找1?int型数字是32位通过n&1判断,如果是结果1,则最后一位是1;然后让n右移一位 用n>>1就行了循环判断public class Solution { public int NumberOf1(int n) { int sum=0; for(int i=0;i<32;i++){...

2020-03-10 21:51:31 78

原创 剑指offer10-矩阵覆盖

其实跟之前的差不多,这也是个最基本的动态规划问题。f(n)=f(n-1)+f(n-2);public class Solution { public int RectCover(int target) { if(target<=2){ return target; } int[] dp = new int[...

2020-03-10 21:48:33 109 1

原创 剑指offer08 09-跳台阶问题

普通跳台阶问题:一次只能跳一个或者两个。最简单方法:暴力递归 f(n)=f(n-1)+f(n-2)或者:记录下pre 和prepre的值,求下一个sumpublic class Solution { public int JumpFloor(int target) { if(target==1){ return 1; } ...

2020-03-10 21:30:22 68

空空如也

空空如也

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

TA关注的人

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