
1.5 leetcode
1.5 leetcode
hyh-hz
书是越读越薄的
展开
-
[排序]9 计数排序
计数排序是一个类似于桶排序的排序算法,其优势是对已知数量范围的数组进行排序。它创建一个长度为这个数据范围的数组C,C中每个元素记录要排序数组中对应记录的出现次数。非原址排序。(1)思路:计数排序算法的基本思想是对于给定的输入序列中的每一个元素x,确定该序列中值小于x的元素的个数。一旦有了这个信息,就可以将x直接存放到最终的输出序列的正确位置上。例如,如果输入序列中只有17个元素的值小...原创 2019-12-18 22:36:21 · 125 阅读 · 2 评论 -
[排序]8 桶排序
非比较排序: 比较排序是基于输入元素间的比较。任意一个比较排序算法在最坏情况下需要比较的次数至少为nlogn。所以说快速排序,堆排序,归并排序都是渐进最优的排序算法。他们的最坏情况时间复杂度为O(nlogn)。 非比较排序不是基于元素间比较的。包括:桶排序,基数排序,计数排序。桶排序:属于非原址排序。(1)思路:假定:输入是由一...原创 2019-12-18 22:07:57 · 240 阅读 · 2 评论 -
[排序]7 归并排序
归并排序是采用分治法的一个典型应用。属于非原址排序。(1)思路:归并排序是将两个有序表合并成一个新的有序表。即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。(2)复杂度分析:(2.1)时间复杂度:对长度为n的文件,需进行logn趟归并,每趟归并的时间为O(n),故其时间复杂度是O(nlogn)。(2.2)空间复...原创 2019-12-18 17:59:25 · 367 阅读 · 2 评论 -
[排序]6 堆排序
堆排序是利用堆的性质进行的一种树形选择排序。属于原址排序。(1)堆的性质:堆有两个性质,分别为结构性质和堆序性质。结构性质:堆是一颗完全二叉树。堆序性质(大顶堆):对任意节点x,x中的键值大于等于左子树节点或右子树节点中的键值。(2)思路: 1)将初始待排序关键字序列(R1,R2....Rn)构建成大顶堆,此时堆顶元素R[1]为最大元素。 2...原创 2019-12-18 12:13:47 · 288 阅读 · 2 评论 -
[排序]5 选择排序
(1)思路: 对待排序的序列,选出关键字最小的数据,将它和第一个位置的数据交换,接着,选出关键字次小的数据,将它与第二个位置上的数据交换。以此类推,直到完成整个过程。所以如果有n个数据,那个需要遍历n-1遍。(2)复杂度分析:(2.1)时间复杂度: 总的比较次数为(n-1)+(n-2)+…+1=1/2*n*(n-1):O()...原创 2019-12-18 11:17:37 · 166 阅读 · 2 评论 -
[排序]4 快速排序
快速排序是一种分治的递归算法,从本质上来说,它是归并排序的就地版本。属于原址排序。(1)思路: 把待排列的数据分为两个子列,从数列中挑出一个数作为“基准”,然后遍历其他数据并和“基准”比较,把小于它的放前面,大于它的放后面。之后通过递归,将各个子序列划分为更小的序列,直到把小于基准值元素的子数列和大于基准值元素的子数列都排序好。(2)复杂度分析:(2.1...原创 2019-12-18 11:01:38 · 143 阅读 · 2 评论 -
[排序]3 冒泡排序
属于原址排序。(1)思路: 冒泡排序就是把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。每次遍历完原数组一次,最大的元素便在最后面。(2)复杂度分析:(2.1)时间复杂度: 最好情况: 正序有序,只需要比较n次。所以为O(n)。程序需加个flag标志位,一次遍历若是正序则break。 最坏情...原创 2019-12-18 10:27:59 · 154 阅读 · 1 评论 -
[排序]2 希尔排序
是对插入排序的改进,也叫作缩减增量排序。属于原址排序。(1)思路: 先取一个小于n(数组长度)的整数d1作为第一个增量,把文件的全部记录分成(n/d1)个组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量dt=1(dt<dt-1<…<d2<d1), 即...原创 2019-12-18 10:08:42 · 216 阅读 · 1 评论 -
[排序]1 插入排序
插入排序适用于少量元素排序。属于原址排序。(1)思路:每次选择一个元素A[i]插入到之前已排好序(从小到大)的部分A[1…i-1]中,插入过程中A[i]依次由后向前与A[1…i-1]中的元素进行比较。若发现A[i]>=A[x],则将A[i]插入到A[x]的后面,A[i]插入前需要移动元素。(2)复杂度分析:(2.1)时间复杂度: 最好情况:正序...原创 2019-12-17 23:07:02 · 147 阅读 · 1 评论 -
[数学]231. 2 的幂
给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。如果存在一个整数 x 使得n == 2x ,则认为 n 是 2 的幂次方。示例 1:输入:n = 1输出:true解释:2^0 = 1示例 2:输入:n = 16输出:true解释:2^4 = 16示例 3:输入:n = 3输出:false方法:一个数 n 是 2 的幂,当且仅当 n 是正整数,并且 n 的二进制表示中仅包含 1 .转载 2021-07-22 12:53:41 · 121 阅读 · 1 评论 -
[数学]204. 计数质数
统计所有小于非负整数n的质数的数量。示例 1:输入:n = 10输出:4解释:小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。示例 2:输入:n = 1输出:0提示:0 <= n <= 5 * 10^6方法:(1)平方根枚举,超时(2)埃氏筛枚举没有考虑到数与数的关联性,因此难以再继续优化时间复杂度。接下来我们介绍一个常见的算法,该算法由希腊数学家厄拉多塞(EratosthenesEratosthenes)提出,..转载 2021-07-20 16:59:57 · 156 阅读 · 1 评论 -
[数学]202. 快乐数
编写一个算法来判断一个数 n 是不是快乐数。「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为1,那么这个数就是快乐数。如果 n 是快乐数就返回 true ;不是,则返回 false 。示例 1:输入:19输出:true解释:1^2 + 9^2 = 828^2 + 2^2 = 686^2 + 8^2 = 1001^2 + 0^2 + 0^2 = 1..转载 2021-07-20 15:14:09 · 148 阅读 · 0 评论 -
[数学]172. 阶乘后的零
给定一个整数 n,返回 n! 结果尾数中零的数量。示例 1:输入: 3输出: 0解释:3! = 6, 尾数中没有零。示例2:输入: 5输出: 1解释:5! = 120, 尾数中有 1 个零.说明:你算法的时间复杂度应为O(logn)。方法:数学,找规律nn! 因子5的个数,结果含0的个数33*2*1 ...转载 2021-07-19 11:44:35 · 204 阅读 · 0 评论 -
[数学]171. Excel表列序号
给定一个Excel表格中的列名称,返回其相应的列序号。例如: A -> 1 B -> 2 C -> 3 ... Z -> 26 AA -> 27 AB -> 28 ...示例 1:输入: "A"输出: 1示例2:输入: "AB"输出: 28示例3:输入: "ZY"输出: 701方法:进制转换代码:// 171. ...转载 2021-07-19 10:14:51 · 145 阅读 · 0 评论 -
[数学]168. Excel表列名称
给你一个整数 columnNumber ,返回它在 Excel 表中相对应的列名称。例如:A -> 1B -> 2C -> 3...Z -> 26AA -> 27AB -> 28...示例 1:输入:columnNumber = 1输出:"A"示例 2:输入:columnNumber = 28输出:"AB"示例 3:输入:columnNumber = 701输出:"ZY"示例 4:.转载 2021-07-19 09:31:52 · 238 阅读 · 0 评论 -
[数学]70. 爬楼梯
假设你正在爬楼梯。需要 n阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2. 1 阶 + 2 阶3. 2 阶 + 1 阶方法:动态规划我们用 f(x) 表示爬到第.转载 2021-07-16 14:58:41 · 191 阅读 · 0 评论 -
[数学]69. x 的平方根
实现int sqrt(int x)函数。计算并返回x的平方根,其中x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1:输入: 4输出: 2示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。方法:二分查找二分查找的下界为 0,上界可以设定为 x。在二分查找的每一步中,我们只需要比较中间元素 mid 的平方与 x的大小关系,并通...转载 2021-07-15 17:26:05 · 147 阅读 · 0 评论 -
[数学]9. 回文数
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。示例 1:输入:x = 121输出:true示例2:输入:x = -121输出:false解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。//9. 回文数static void test_9() { //int x.转载 2021-07-15 16:02:16 · 123 阅读 · 0 评论 -
[数学]7. 整数反转
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围[−231,231− 1] ,就返回 0。示例 1:输入:x = 123输出:321示例 2:输入:x = -123输出:-321// 7. 整数反转static void test_7() { //int x = 123; int x = -123; int ret = reverse(x); Sy...转载 2021-07-15 15:26:39 · 136 阅读 · 0 评论 -
[位运算]190. 颠倒二进制位
颠倒给定的 32 位无符号整数的二进制位。提示:1 请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。2 在 Java 中,编译器使用二进制补码记法来表示有符号整数。因此,在上面的示例 2中,输入表示有符号整数 -3,输出表示有符号整数 -1073741825。示例 1:输入: 0000001010010100000111101001..转载 2021-07-19 15:06:32 · 90 阅读 · 0 评论 -
[位运算]191. 位1的个数
编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 '1' 的个数(也被称为汉明重量)。提示:1 请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。2 在Java 中,编译器使用二进制补码记法来表示有符号整数。因此,在上面的示例 3中,输入表示有符号整数 -3。示例 1:输入:00000000...转载 2021-07-19 15:59:08 · 98 阅读 · 0 评论 -
[栈]155. 最小栈
设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。push(x) —— 将元素 x 推入栈中。pop()—— 删除栈顶的元素。top()—— 获取栈顶元素。getMin() —— 检索栈中的最小元素。示例:输入:["MinStack","push","push","push","getMin","pop","top","getMin"][[],[-2],[0],[-3],[],[],[],[]]输出:[null,null,null,nul..转载 2021-07-16 16:13:52 · 85 阅读 · 0 评论 -
[栈]225. 用队列实现栈
请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。实现 MyStack 类:void push(int x) 将元素 x 压入栈顶。int pop() 移除并返回栈顶元素。int top() 返回栈顶元素。boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。注意:你只能使用队列的基本操作 —— 也就是push to back、peek/pop from front、si..转载 2021-07-21 15:16:07 · 110 阅读 · 0 评论 -
[字符串]944. 删列造序
给你由 n 个小写字母字符串组成的数组 strs,其中每个字符串长度相等。这些字符串可以每个一行,排成一个网格。例如,strs = ["abc", "bce", "cae"] 可以排列为:abcbcecae你需要找出并删除 不是按字典序升序排列的 列。在上面的例子(下标从 0 开始)中,列 0('a', 'b', 'c')和列 2('c', 'e', 'e')都是按升序排列的,而列 1('b', 'c', 'a')不是,所以要删除列 1 。返回你需要删除的列数。...转载 2021-07-15 14:48:58 · 110 阅读 · 0 评论 -
[字符串]58. 最后一个单词的长度
58. 最后一个单词的长度。转载 2023-04-15 23:19:40 · 105 阅读 · 0 评论 -
[字符串]205. 同构字符串
给定两个字符串s和t,判断它们是否是同构的。如果s中的字符可以按某种映射关系替换得到t,那么这两个字符串是同构的。每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本身。示例 1:输入:s = "egg", t = "add"输出:true示例 2:输入:s = "foo", t = "bar"输出:false方法:HashMap不同字...转载 2021-07-21 11:10:11 · 154 阅读 · 0 评论 -
[数组]136. 只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1方法:位运算异或代码:// 136. 只出现一次的数字static void test_136() { //int[] nums = {2, 2, 1}; int[] nums = {4, 1, 2, 1, 2}; i转载 2021-07-16 15:38:46 · 87 阅读 · 0 评论 -
[数组]228. 汇总区间
给定一个无重复元素的有序整数数组 nums 。返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表。也就是说,nums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于 nums 的数字 x 。列表中的每个区间范围 [a,b] 应该按如下格式输出:"a->b" ,如果 a != b"a" ,如果 a == b示例 1:输入:nums = [0,1,2,4,5,7]输出:["0->2","4->5","7"]解释:区间范围是:[0,2.转载 2021-07-21 16:33:16 · 118 阅读 · 0 评论