自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 4月11号打卡

2021.4.11 丑数Ⅱ题目描述给你一个整数 n ,请你找出并返回第 n 个 丑数 。丑数 就是只包含质因数 2、3 和/或 5 的正整数。思路分析代码 public int nthUglyNumber(int n) { int[] dp = new int[n]; dp[0] = 1; int num2,num3,num5,p2 = 0,p3 = 0,p5 = 0; for(int i = 1;i < n;i++)

2021-04-11 16:28:04 63

原创 AVLTree

平衡二叉树二叉查找树的问题当我们依次添加n个有序键值对的时候,二叉查找树的高度为n,这样就大大降低了查找的效率,因为每次查找还要判断每个结点中一个空的链接,甚至比单链表还要慢,为了解决这个问题,我们希望构造的二叉查找树的高度为~lgN,这就是我们要说的平衡二叉树。简单介绍1)平衡二叉树也叫做平衡二叉查找树(Self-balancing binary search tree)又称为AVL树,可以保证查询效率高。2)具有以下特点:它的左右两个子树的高度差绝对值不超过1,并且两个子树都是平衡二叉树。平衡

2021-04-11 15:57:42 127

原创 4月10号打卡

丑数题目描述给你一个整数 n ,请你判断 n 是否为 丑数 。如果是,返回 true ;否则,返回 false 。丑数 就是只包含质因数 2、3 和/或 5 的正整数。思路丑数只包含质因数2 3 5,即可以写成2x * 3 y * 5 z的形式,x y z都大于等于0,只需要把其中的 2 3 5除尽看看是否等于1就可以了。代码 public boolean isUgly(int n) { if(n <= 0) return false; wh

2021-04-10 11:16:15 72

原创 4月9号打卡

2021.4.9 154. 寻找旋转排序数组中的最小值 II题目描述给你一个可能存在 重复 元素值的数组 nums ,它原来是一个升序排列的数组,并按上述情形进行了多次旋转。请你找出并返回数组中的 最小元素 。思路今天依旧采用二分法,但值得注意的是当nums[mid] >= nums[left] 或 nums[mid] <= nums[right] 时都不能确定哪边是有序的。但可以知道,当nums[mid] > nums[left]时,最小元素一定不在左边,左边有序。当nums[m

2021-04-09 16:23:24 64

原创 BinarySearchTree

1.二叉查找树定义BST是一棵二叉树,其中的每一个结点都含有一个Comparable的键(以及相关联的值)且每个结点的键都大于左子树中的任意结点的键和大于右子树中任意结点的键。2.基于二叉查找树的符号表public class BinarySearchTree<Key extends Comparable<Key>,Value> { TreeNode root = null;//保存根结点 //删除结点方法 public void delete(Key key)

2021-04-08 21:13:25 92

原创 4月8号打卡

2021.4.8 寻找旋转排序数组中的最小值题目描述已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组。例如,原数组 nums = [0,1,2,4,5,6,7] 在变化后可能得到:若旋转 4 次,则可以得到 [4,5,6,7,0,1,2]给你一个元素值 互不相同 的数组 nums ,它原来是一个升序排列的数组,并按上述情形进行了多次旋转。请你找出并返回数组中的 最小元素 。思路一种解法是直接遍历,时间复杂度是O(n),但本题可以采用二分法,虽然数组进行了

2021-04-08 14:12:17 53

原创 4月7号打卡

2021.4.7 搜索旋转排序数组 II题目描述给定一个有序数组,但数组从 k 处旋转,将 k 以后的数字放在数组的前面,例如:1 2 3 4 5 6 --> 4 5 6 1 2 3 。数值可以重复给出一个查询算法,返回boolean。代码实现首先考虑不存在重复数值的情况下的二分法,旋转以后从中间分开有两种状态,左边有序右边无序或者右边有序左边无序,根据这两种状态我们可以分情况使用二分查找。判断当左边有序且查找的值处于左边时,向左边二分,否则向右边查找。而当右边有序时判断是否在右边,如果不是

2021-04-07 20:59:29 69

原创 4月6号打卡

2021.4.6 删除有序数组中的重复项 II题目描述给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 最多出现两次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。说明:为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。你可以想象内部操作如下:// nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝

2021-04-06 16:43:30 47

原创 哈夫曼树的简介与创建

哈夫曼树哈夫曼树的几个重要概念1)路径和路径长度:在一棵树中,从一个结点可以到达孩子结点或孙子结点之间的通路,叫做路径,通路中分支的数目成为路径的长度。若规定根结点的层数为1,则从根结点到第n层的路径长度为 n - 1。2)结点的权及带权路径长度:若赋给树种结点一个含有某种意义的数值,则这个数值称为结点的权。结点的带权路径长度为:从根结点到该结点的路径长度与权的乘积。3)树的带权路径长度:树的带权路径长度规定为所有叶子结点的带权路径长度之和,记为WPL(weighted path length),权

2021-04-05 18:27:24 248 3

原创 4月5号打卡

2021.4.5 合并两个有序数组题目描述给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 的空间大小等于 m + n,这样它就有足够的空间保存来自 nums2 的元素。示例 1:输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3输出:[1,2,2,3,5,6]示例

2021-04-05 12:25:06 47

原创 Java堆排序

复习排序三:堆排序对于堆排序的简单介绍堆排序可以分为两个阶段。在堆的构造阶段中,我们将原始数组重新组织为一个有序堆。在排序阶段,我们把堆顶元素(即数组0下标)与未排序数组的最后一个元素交换,然后再调用 sink 方法把未排序数组重新堆有序化。1.关于堆一些定义1)当一棵二叉树的每个节点都大于等于它的两个子节点时,它被称为堆有序2)二叉堆是一组能够用堆有序的完全二叉树排序的元素,并在数组中按照层级存储(算法第四版中的代码是不使用数组第一个元素的,但我的代码中是使用了的)。2.由上至下堆的有序化的实

2021-04-04 22:40:30 53

原创 线索化二叉树的建立与遍历

线索化二叉树基本介绍1)具有n个节点的二叉链表中有(2n - (n - 1))= n + 1 个空指针域,利用空指针域存放指向该节点某种遍历次序下的前驱结点和后继节点的指针,这种附加的指针称为线索。2)这种加入了线索的二叉链表叫做线索链表,相应的二叉树叫做线索二叉树(Threaded BinaryTree)。线索二叉树根据遍历的顺序可以分为三种:前序搜索二叉树、中序搜索二叉树、后序搜索二叉树。3)一个节点的前一个节点,成为前驱结点。4)一个节点的后一个节点,成为后继节点。代码实现为了区分当前

2021-04-04 17:02:23 172

原创 4月4号打卡

2021.4.4 森林中的兔子题目描述森林中,每个兔子都有颜色。其中一些兔子(可能是全部)告诉你还有多少其他的兔子和自己有相同的颜色。我们将这些回答放在 answers 数组里。返回森林中兔子的最少数量。示例:输入: answers = [1, 1, 2]输出: 5解释:两只回答了 “1” 的兔子可能有相同的颜色,设为红色。之后回答了 “2” 的兔子不会是红色,否则他们的回答会相互矛盾。设回答了 “2” 的兔子为蓝色。此外,森林中还应有另外 2 只蓝色兔子的回答没有包含在数组中。因此

2021-04-04 11:17:18 86

原创 4月3号打卡

2021.4.3 最长公共子序列题目描述给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。两个字符串的 公共子序列 是这两个字符串所共同拥有的子序列。示例 1:输入:text1 =

2021-04-03 23:08:04 52

原创 4月2号打卡

2021.4.2 直方图的水量题目描述给定一个直方图(也称柱状图),假设有人从上面源源不断地倒水,最后直方图能存多少水量?直方图的宽度为 1。上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的直方图,在这种情况下,可以接 6 个单位的水(蓝色部分表示水)。示例:输入: [0,1,0,2,1,0,1,3,2,1,2,1]输出: 6思路我采用的是暴力解法,即遍历每一个"直立方",讲其能装的单位水加起来,得出结果,每个立方能装的水和它的左右两边的最大值有关,需要求出两边的最

2021-04-02 16:16:18 80

原创 Java快速排序

复习排序二:快速排序快速排序是对冒泡排序的一种改进,基本思想是,选取一个基准数,将数组分成两部分,一部分比基准数小,一部分比基准数大,然后按照此方法再对这两部分的进行分割,整个过程可以递归进行,最后将整个数列排序成有序的。 public static void quickSort(int[] nums,int left,int right) { if(right <= left) return; int temp; int low = left;

2021-04-01 23:45:16 47

原创 Java冒泡排序

复习排序一:冒泡排序冒泡排序是从序列从前向后依次比较相邻的数,若发现逆序则交换顺序,这样可以将最大或者最小的数逐渐移向最后,像水泡一样慢慢上升。每一趟排序可以确定一个数的位置,即 n 个数只需要排序 n - 1 次,而假设 i 为排序的次数,每一趟排序有 n - i 个待排序数,则只需要对比 n - i - 1 次,两次for循环就能搞定public void bubbleSort(int[] nums){ int temp;//用于交换的中间变量 for(int i = 0;i < nums

2021-04-01 23:04:16 67

原创 4月1号打卡

2021.4.1 笨阶乘题目描述通常,正整数 n 的阶乘是所有小于或等于 n 的正整数的乘积。例如,factorial(10) = 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1。相反,我们设计了一个笨阶乘 clumsy:在整数的递减序列中,我们以一个固定顺序的操作符序列来依次替换原有的乘法操作符:乘法(*),除法(/),加法(+)和减法(-)。例如,clumsy(10) = 10 * 9 / 8 + 7 - 6 * 5 / 4 + 3 - 2 * 1。然而,这些运算仍

2021-04-01 19:54:37 157

空空如也

空空如也

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

TA关注的人

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