自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 java----实现 HashMap

问题描述实现 HashMap 的 put 方法实现 HashMap 的 get 方法源代码public class MapNode { int key; int value; MapNode next; public MapNode(int key, int value) { this.key = key; this.value = value; }}public class MyHashMap { .

2021-03-28 22:57:22 80

原创 java----归并排序

源代码public class Sort { public void mergeSort(int[] arr) { mergeSortInternal(arr, 0, arr.length); } // 递归划分区间, 直到区间有序时, 进行合并 // 区间中只有一个元素时, 元素是有序的 // 然后把有序区间进行合并 // 递归划分 [start, end)区间 private void mergeSortInternal(int

2021-03-26 15:31:10 68

原创 java----快速排序

问题描述实现快速排序解决思路升序为例[start, end] 区间的元素进行排序, 以 start 位置的元素为基准, 将小于该位置的值得元素放在该元素前面, 其余放在后面.设置两个引用 i 和 j, 让 i 指向要排序start 位置, 让 j 指向 end 结束位置 ,如果基准值小于等于 j 位置的元素, j–; 如果 基准值大于等于 i 位置的元素, i++; 直到 i 和 j 重合时, j 所在的位置就是比 基准值小的元素, 将 j 位置的元素与基准值交换, 就完成了一次排序, 然.

2021-03-25 13:27:52 49

原创 java----堆排序

问题描述用堆来实现对数组中数的原地排序堆的性质: 堆顶元素是整个数组中的最大值(大堆)或最小值(小堆).解决思路以升序为例先建立大堆将堆中的最大值也就是 0 号元素与最后一个位置的元素交换, 然后将堆中的元素减一个, 同时把现在 0 号位置的元素进行向下调整使其满足堆的性质.当队中的元素为 0 时, 排序完成.源代码public class Sort { // 堆排序 public void heapSort(int[] arr) { creat.

2021-03-25 12:55:52 54 1

原创 java----自己实现堆的建立插入删除(向上向下调整)

堆堆的性质堆的向下调整堆的向上调整堆的建立堆的插入堆的删除堆的性质①堆在物理上用数组存储, 逻辑上是二叉树的形式②小堆: 任意节点的值都不小于父节点的值大堆: 任意节点的值都不大于父节点的值堆的向下调整以小堆为例向下调整的前提:①除了要调整的位置外, 其他位置都满足堆的性质// 3, 向下调整 public void downHeap(int[] arr, int size, int index) { // 没有此位置的元素 if (index &l

2021-03-21 18:41:57 96

原创 java----自己实现二叉搜索树的增删查和中序遍历

二叉搜索树中序遍历二叉搜索树二叉搜索树的增加二叉搜索树的查找中序遍历二叉搜索树二叉搜索树的增加 // 3. 二叉搜索树的删除 public boolean remove(char c) { // 先找到该节点 TreeNode cur = root; TreeNode pre = null; while (cur != null) { int cmp = compare(c, cur.val);

2021-03-20 12:05:19 105 2

原创 java----排序总结(插入+选择+希尔+冒泡+快速+归并+堆排序)

排序1. 插入排序2. 选择排序4. 冒泡排序5. 堆排序6. 快速排序1. 插入排序 public int[] insertSort(int[] arr) { for (int i = 0; i < arr.length - 1; i++) { int key = arr[i + 1]; int j = 0; for (j = i; j >= 0; j--) { i

2021-03-14 20:45:29 117

原创 java----使用前中后序遍历构建二叉树

问题描述①使用先序和中序遍历的结果, 构建二叉树②使用中序和后序便利的结果, 构建二叉树源代码// 1. 根据前序和中序构建二叉树 public TreeNode buildTreeUsePreIn(List<Character> preorder, List<Character> inorder) { TreeNode root = null; if (!preorder.isEmpty()) { int .

2021-03-14 14:51:37 111

原创 java----树的常考题(树的结点个数+叶子结点个数+某层结点树+深度+树是否相同+是否互为镜像+是否对称+是否为平衡树+是否为子树)

树习题1. 判断两棵树树是否相同2. 判断两个树是否互为镜像3. 判断一个树是否对称4. 判断一棵树是否为另一棵树的子树5. 树的最大深度6. 判断树是否为平衡树7. 叶子节点的个数8. 节点的个数9. 第 k 层结点个数10. 树的高度11. 寻找 toFind 结点习题1. 判断两棵树树是否相同 public static boolean isSameTree(TreeNode p, TreeNode q) { if (p == null && q == nu

2021-03-13 20:17:55 139

原创 java----树的后序遍历(非递归)

问题描述实现树的后序遍历(非递归)源代码代码中有注释public class TreeNode { public char val; public TreeNode left; public TreeNode right; public TreeNode(char var) { this.val = var; }}import java.util.Deque;import java.util.LinkedList;public .

2021-03-12 22:12:38 637 1

原创 java----比较含有退格的字符

问题描述比较含有退格的字符( ‘#’ 该字符表示退格 ).S = “qwer#ee#c”;T = “qwer#ec”退格后的字符串为s = “qweec”;t = “qweec”因此两个字符串相等.解决思路先创建两个栈, 用于存放退格后真正的字符串.当遇到字符就进栈, 遇到 ‘#’ (该字符表示退格) 则出栈.弹出栈中元素进行比较, 不相等返回 false, 所有都相等就返回 true;源代码import java.util.Deque;import java.ut.

2021-03-12 20:35:25 133 1

原创 java----实现循环双端队列

问题描述实现循环双端队列完成头插头删尾插尾删, 判断空与满.解决思路front 指向头部元素rear 指向尾部元素的下一个元素.浪费一个空间 :判别队列为空的条件是:front == rear;;判别队列为满的条件是:(rear + 1) % capacity == front;当 rear 循环到数组的前面,要从后面追上 front,还差一格的时候,判定队列为满。源代码class MyCircularDeque { private int capacity;..

2021-03-11 23:30:53 146

原创 java----栈和队的实现( 包括循环队列 )

栈和队的实现1. 基于顺序表实现栈2. 基于链表实现栈3. 基于顺序表实现队4. 基于链表实现队1. 基于顺序表实现栈public class MyStack2 { private int[] stack = new int[100]; private int size; public void push(int e) { if (this.size == stack.length) { return; }

2021-03-09 14:34:25 76

原创 java----判断一个树是否为平衡树

问题描述判断一个树是否为平衡树解决思路1> 如果树为空, 返回 true2> 如果树不为空,求左右子树高度之差 sub,如果 sub 的绝对值大于 1, 说明不是平衡树, 返回 false.否则判断左子树和右子树是否都为平衡树求树的深度详细讲解请点击 链接: link.源代码class Solution { public int getHeight(TreeNode root) { if (root == null) { r.

2021-03-08 12:48:16 187

原创 java----判断一个树是否为另一个树的子树

问题描述判断一个树是否为另一个树的子树解决思路1> 先在树中找是否有该节点.2> 然后以该节点为树, 判断以该节点为树的树和子树是否为相同的树.判断两个树是否相同, 请点击https://blog.csdn.net/m0_50527451/article/details/114498127源代码class TreeNode { int val; TreeNode left; TreeNode right; TreeNode() {.

2021-03-08 12:28:28 254

原创 java----判断两个树是否相同

问题描述判断两个树是否相同解决思路①两个树都为空树, 返回 true . 两个树是相同.②两个树中有一个树为空, 返回 false③都不为空树.两个树的根节点的值相等两个树对应的左子树相同两个树对应的右子树相同源代码public class TreeNode { public char var; public TreeNode left; public TreeNode right; public TreeNode(char var) { .

2021-03-07 21:04:25 973

原创 java----非递归遍历树

问题描述实现非递归遍历树①先序②中序解决思路①先序1> 特殊情况: 如果根为空, 直接返回2> 如果不为空树先将根节点压入栈中当栈不为空时, 进行循环弹出栈顶元素并输出, 然后将栈顶元素的右孩子先压入栈, 再压入左孩子 (因为栈是先进后出, 所以进行循环的时候就是左孩子先出栈.②中序1> 特殊情况: 如果根为空, 直接返回2> 如果不为空树, 设置一个 cur 引用,使其指向树的根部.当栈不空或者 cur 不为空时, 进行循环如果 cur 不为空, .

2021-03-07 15:52:56 647 4

原创 java----求树的深度

问题描述求一棵树的深度, 并返回这棵树的深度解决思路如果树为空树, 返回 0;如果树不空, 求左子树的高度和右子树的高度并取其中的较大者作为子树的高度, 原树的高度就是 求出的较大者 + 1 (这个 1 是根节点所在的位置也算一层).max(leftHeightTree, rightHeightTree) + 1;源代码 public int getHeight(TreeNode root) { if (root == null) { return .

2021-03-07 11:37:53 1265

原创 java----递归遍历树

问题描述使用递归的方法遍历树:①先序遍历②中序遍历③后序遍历源代码树中节点的表示class TreeNode { int val; TreeNode left; TreeNode right; TreeNode() {} TreeNode(int val) { this.val = val; } TreeNode(int val, TreeNode left, TreeNode right) { t.

2021-03-07 11:27:16 693

原创 java----求环的入口点

问题描述寻找一个链表进入环的结点并进行返回.如果无返回 null.解决思路①设置两个引用 slow, fast.②判断链表是否有环. slow 一次走一步, fast 一次走两步,如果 fast == null , 说明链表无环, 返回空如果 slow == fast , 说明走到某个结点两个相遇了, 此时链表有环.这时将这设置两个引用 cur1, cur2, 使 cur1 引用指向链表头结点, cur2 的引用指向相遇结点. 两个引用 cur1, cur2 一次往后走一步, 直到两个引用.

2021-03-07 02:19:16 98 2

原创 java----寻找链表中间结点

问题描述返回链表中间结点如果链表中元素有偶数个, 则返回两个中的第二个.解决思路①设置两个结点, 都指向链表头结点②一个结点一次走两步, 一个一次走一步,当快的结点走到最后一个节点或为空时, 慢结点所指的位置就是链表中间结点源代码public class ListNode { int val; ListNode next; public ListNode(int val) { this.val = val; }}class Soluti.

2021-03-05 19:40:00 237

原创 java----将两个升序链表合并为一个新的升序链表

问题描述将两个升序链表合并为一个新的升序链表并返回解决思路①创建一个新链表②设置两个指针 (l1 , l2), 使它们分别指向两个链表的头结点.用 l1, l2 遍历两个链表的同时, 比较两个链表的每一个结点元素的大小将较小的元素尾插到新链表中, 同时将此链表结点往后走一步.不断比较链表结点的值,不断更新链表 l1 , l2的位置, 直到 l1, l2 中任意一个走到了链表的尾部.③将 l1, l2 中没走到链表尾部,所剩余的结点直接链接到新链表的尾部.(因为它是有序链表, 如果一个走.

2021-03-05 19:12:12 1328 1

原创 java----partition将所有小于x的结点排在其余结点之前

问题描述将所有小于 x 的结点排在其余节点之前, 要求原来数据的顺序不能改变, 返回排列后链表的头结点.解决思路①设置两个链表(smallHead, bigHead) , smallHead 放小于 x 的结点, bigHead放大于或等于 x 的结点.②遍历原本的链表将小于 x 的尾插到 smallHead, 大于或等于 x 的结点尾插到 bigHead (采用尾插是因为题目要求:原来数据的顺序不能改变).源代码public class ListNode { int val; .

2021-03-05 18:46:16 260

原创 java----两个链表寻找相交结点

问题描述寻找两个链表相交的结点解决思路①先求出两个链表的长度②将两链表长度相减, 将两链表中较长的链表走两个链表长度的差值的步数, 这时两链表长度相等.③两链表一步一步走, 比较结点是否相同.若相同则返回该节点;如果直到两个链表都走到结尾了, 还不相同, 则 两链表不相交.源代码public class GetIntersectionNode { public ListNode getIntersectionNode(ListNode headA, ListNode headB.

2021-03-04 21:39:55 348 3

原创 java----整数是否为回文数

问题描述判断一个整数是否为回文数解决思路①当 整数为负数或者不为 0 且除 10 余 0 的整数时, 不是回文数.②将原来的整数分成两半, 比较相等源代码public class Solution1 { public static boolean isPalindrome(int num) { if (num < 0 || (num != 0 && num % 10 == 0)) { return false; .

2021-03-02 22:54:46 98

原创 java----赎金信(magazine 中是否包含random 中的每个字符)

问题描述两个字符串ransom, magazine.(两个字符串只由小写字母组成)magazine 中是否包含random 中的每个字符 (每个字符只能用一次)解决思路①所有字母第一次搜索时都从杂志字符串的第一个字符开始检索(也就是下表为 0 的字符开始检索)②每一个字母检索到之后, 将cap 数组中的值就行修改, 使得下一次出现相同字符时直接从上一次出现相同字符的下一个字符开始检索源代码public class Solution { public static boolean .

2021-03-02 22:36:29 117

原创 java----按奇偶排序数组

问题描述将一个数组中的偶数放在奇数前面.解决思路设置两个指针, 一个指针从前往后遍历找奇数, 另一个指针从后往前遍历找偶数. 进行交换.当两个指针相遇时, 循环结束.源代码class Solution { public int[] sortArrayByParity(int[] A) { int i = 0; int j = A.length - 1; while (i < j) { while (i &l.

2021-03-01 11:18:48 1134

原创 java----反转字符串中的字母

问题描述反转字符串中的字母, 不对其他字字符进行反转.解决思路将字符串中的字符压入到栈中, 栈的弹出顺序就是字母的逆序.判断原字符串中的每个字符是否为字母, 若为字母, 弹出栈顶的元素;否则, 就将该字符追加到结果中.源代码class Solution { public String reverseOnlyLetters(String S) { Stack<Character> letters = new Stack(); for (char .

2021-03-01 11:05:41 334

原创 java----返回有序数组每个元素平方后的有序数组

问题描述给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序排序.解决思路① 先修改数组中元素的值, 将其改成该数的平方.②再对数组进行排序.源代码class Solution { public int[] sortedSquares(int[] nums) { for (int i = 0; i < nums.length; i++) { nums[i] *= nums[i]; .

2021-03-01 10:17:38 316

空空如也

空空如也

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

TA关注的人

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