自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 问答 (1)
  • 收藏
  • 关注

原创 一文告别堆:堆的结构代码+堆排序

堆的概述加代码实现大根堆和小根堆普通数组堆化的代码(两种方法)public static void heapInsert(int[] heap,int index){//先插入到数组的最后一个位置,然后根据那个位置去调整堆[大根] while(heap[index]>heap[(index-1)/2]){//一直和父亲比较(到了根节点,还没有结束,根节点的父亲还是根节点) swap(heap,index,(index-1)/2);

2022-05-03 21:23:07 91

原创 快速排序算法(划分轴的小于区等于区和大于区)

快排思想简单说:数组最右边是轴,小于区从左边遍历,大于区域从右边遍历,等于区域在中间:思路:指针i从0开始遍历,小于区域从左边扩,大于区域从右边扩,i==轴,直接i++i<轴,i位置数和小于区的下一个交换,小于区扩1,i++i>轴,i位置数和大于区域的左一个交换,i不变PS:时间复杂度默认轴:arr[R]最好情况是它可以平均分配数组,此时nlogn,空间复杂度:O(logN);*总结:划分值越接近中点,性能越好,而越靠紧两边,性能越差优化arr[R]swap(ar

2022-05-03 21:13:35 273

原创 归并排序递归和非递归写法+归并排序的精髓

一:归并排序算法实现直接看图:简单说:一个数组分成两个数组,让两个子数组有序,将有序的两个子数组合并,怎么让子数组有序?依靠归并算法归并算法注意:传入的子数组是有序的.怎么得到有序的数组,子数组一直划分下去,子数组迟早是一个元素,一个元素的数组当然有序,然后合并,合并过程让两个有序的子数组变成一个有序的子数组,然后一直返回,直到让这个数组有序 public static void merge(int[] arr,int L,int mid,int R){ //用help数组去复

2022-05-03 21:06:09 108

原创 二叉树算法大总结:借助遍历的题型+需要借助递归返回多个信息的题型[本质:遍历]

二叉树算法大总结:遍历+递归思想

2022-05-03 10:09:47 487

原创 只用一文整理好构建二叉树的算法大总结:序列化和反序列化+给出中序(前序/后序)构建+有序数组构建平衡搜索二叉树

序列化二叉树+构建二叉树的大总结

2022-05-02 23:10:42 588

原创 一文解决二叉树深度有限遍历[递归和非递归方式]和广度优先遍历[发现新层的两种处理方法]

深度优先遍历递归方式preinpost public static class Node { int value; Node left; Node right; public Node(int value) { this.value = value; } } /*中左右*/ public void recursivePreTraversal(Node root) {

2022-04-28 23:35:34 646

原创 栈和队列初步刷题篇

两个栈实现队列方法:两种倒入方法class MyQueue { Stack<Integer> stackIn ; Stack<Integer> stackOut ; public MyQueue() { stackIn=new Stack<>(); stackOut=new Stack<>(); } public void InToOut(){ whil

2022-04-27 22:13:33 55

原创 字符串刷题篇1

反转字符串编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1)O(1)O(1) 的额外空间解决这一问题。你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。示例 1:输入:[“h”,“e”,“l”,“l”,“o”]输出:[“o”,“l”,“l”,“e”,“h”]示例 2:输入:[“H”,“a”,“n”,“n”,“a”,“h”]输出:[“h”,“a”,“n”,“n”,“

2022-04-26 22:28:59 88

原创 哈希表刷题2

一个数组中两个数相加=target给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]方法:判断相加和返回数组下标===>mapclass Solution { publi

2022-04-25 22:19:31 73

原创 哈希表刷题篇1

有效字母异位词给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。示例 1: 输入: s = “anagram”, t = “nagaram” 输出: true示例 2: 输入: s = “rat”, t = “car” 输出: false说明: 你可以假设字符串只包含小写字母。方法字母是有限个的,所以用简单的hash表结构—数组class Solution { public boolean isAnagram(String s, String t) {

2022-04-24 21:30:19 158

原创 链表刷题篇2

删除倒数第k个结点给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。双指针:开始要在head的前一个,所以设置虚节点class Solution { public ListNode removeNthFromEnd(ListNode head, int n) { //快慢指针:快的先走k步,然后一起走 ListNode dummy=new ListNode(-1); dummy.next=head; ListNod

2022-04-24 21:20:48 449

原创 链表篇题目

删除结点问题题意:删除链表中等于给定值 val 的所有节点。示例 1:输入:head = [1,2,6,3,4,5,6], val = 6输出:[1,2,3,4,5]class Solution { public ListNode removeElements(ListNode head, int val) { //设置虚节点和不设置虚节点:好处是将头结点不用单独讨论 //对删讨论头结点 while(head!=null&

2022-04-22 00:07:56 461

原创 数组刷题篇

二分法题:给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。输入: nums = [-1,0,3,5,9,12], target = 9 输出: 4 解释: 9 出现在 nums 中并且下标为 4 方法;二分:循环和递归class Solution { //循环和递归两种做法 public int search(int[] nums,

2022-04-20 22:12:49 83

原创 二叉树套路4

package class08;/** 可能性:head有无关* 无关:左右树的最大搜素子二叉树大小* 有关:左右都属搜索二叉树,且左边的最小于head,右边最小大于head** 统一:* 左边:最大子搜索树size,左边是不是搜索二叉树,max* 右边:最大子搜索树size,它整体是不是搜搜二叉树,min* 全集:最大子搜索树size,是不是整体是,max和min** */public class MaxSubSearchBT { public static class N

2022-03-11 22:13:35 249

原创 二叉树套路3

package class08;/** head最大距离的可能性:和head有关和无关* 无关:左右的最大距离* 有关:左高+右高+1* Info信息:树最大距离,和高度* */public class MaxDistance { public static class Node{ int value; Node left; Node right; public Node(int value){ t

2022-03-11 22:13:00 46

原创 二叉树套路2

package class08;/** 判断是否二叉树* 左:平否* 右:平否* head:左高,右高相差1内** Info:isBalancd;height* */public class IsBalanced { public static class Node{ int value; Node left; Node right; public Node(int value){ this.v

2022-03-11 22:12:30 50

原创 二叉树套路1

package class07;import java.util.*;public class SerialBT { public static class Node{ int value; Node left; Node right; public Node(int value){ this.value=value; } } //pre public static

2022-03-11 22:11:52 50

原创 四种遍历实现二叉树的序列化

package class07;import java.util.*;public class SerialBT { public static class Node{ int value; Node left; Node right; public Node(int value){ this.value=value; } } //pre public static

2022-03-11 22:10:53 164

原创 二叉树的三种层次遍历

package class07;import java.util.HashMap;import java.util.LinkedList;import java.util.Queue;/** flag:发现一层结束*简答实现;单纯打印* 每层打印:发现每层的开始和结束** 实现一:Map:poll后比较curLevel,!=就poll的是新层;否则还是该层* Map<Node,Integer>--<node,deep>:每个结点记录了宽度* int curLev

2022-03-11 22:09:33 141

原创 栈对二叉树的遍历

栈对二叉树的遍历package class07;import java.util.Stack;/**pre pos:弹出打印,压右左/压左右*in:cur左窜,弹出打印,cur变cur.right* */public class UnRecuriveTranversalBT { public static class Node{ int value; Node left; Node right; public Node(

2022-03-11 22:08:12 361

原创 【无标题】

递归遍历二叉树在这里插入代码package class07;/** 二叉树的递归遍历:【递归序】* :每一个结点在递归的时候会来到三次,开始递归:遍历左树回来;遍历右数回来* if:head==null:return* sout:head.value;* pre:(head.left)* pre:(head.right)* *//** Recurive:递归:Traversal遍历* */public class RecuriveTraversalBT { public s

2022-03-11 22:06:51 234

空空如也

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

TA关注的人

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