jz43.1~n整数中1出现的次数 发表于 2020-08-17 | 分类于 算法 字数统计: 187 | 阅读时长 ≈ 1 题目描述 题解某位中 11 出现次数的计算方法: 根据当前位 cur值的不同,分为以下三种情况: 当 cur = 0 时:此位 1 的出现次数只由高位 high 决定,计算公式为: 当 cur = 1 时: 此位 1的出现次数由高位 high 和低位 low 决定,计算公式为: 当 * ... 阅读全文 »
jz41.数据流中的中位数 发表于 2020-08-16 | 分类于 算法 字数统计: 398 | 阅读时长 ≈ 1 题目描述 题解列表(不推荐)在不考虑时间复杂度仅仅实现功能的情况下, 用一个列表就可以实现题目要求 12345678910111213141516171819202122232425public class MedianFinder { /** initialize your dat ... 阅读全文 »
215.数组中的第k个最大元素 发表于 2020-08-16 | 分类于 算法 字数统计: 962 | 阅读时长 ≈ 4 题目描述在未排序的数组中找到第K个最大的元素。请注意,你需要找的是数组排序后的第K个最大的元素, 而不是第K个不同的元素。 示例一:输入: [3,2,1,5,6,4] 和 k = 2输出: 5 示例二:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4题解使用JAVA自带的优 ... 阅读全文 »
jz40.最小的k个数 发表于 2020-08-16 | 分类于 算法 字数统计: 413 | 阅读时长 ≈ 1 题目描述 题解堆想要获得一个数组中的最小的K个数, 可以使用堆结构完成该功能. 创建一个小根堆, 每添加一个元素, 其顶部元素都是所有元素中最小的. 先将所有元素都压入堆中, 然后弹出K次, 便得到了最小的K个数 1234567891011121314public int[] getLeastNum ... 阅读全文 »
jz38.字符串的排列 发表于 2020-08-15 | 分类于 算法 字数统计: 235 | 阅读时长 ≈ 1 题目描述 题解回溯算法常规的回溯算法思路, 需要注意的有以下几点: 为了方便记录可行字符串, 使用了动态列表, 但是这道题让返回的是String[], 可以使用方法res.toArray(new String[0]) 因为所给的字符串可能会有重复字符的情况, 所以需要考虑降重的操作 123456 ... 阅读全文 »
jz33.二叉搜索树的后序遍历序列 发表于 2020-08-15 | 分类于 算法 字数统计: 292 | 阅读时长 ≈ 1 题目描述 题解分治递归后序遍历定义: [ 左子树 | 右子树 | 根节点 ] ,即遍历顺序为 “左、右、根” 。 二叉搜索树定义: 左子树中所有节点的值 << 根节点的值;右子树中所有节点的值 >> 根节点的值;其左、右子树也分别为二叉搜索树。 终止条件: 当 i \geq ... 阅读全文 »
jz31.栈的压入,弹出序列 发表于 2020-08-15 | 分类于 算法 字数统计: 203 | 阅读时长 ≈ 1 题目描述 题解辅助栈需要使用一个辅助栈来完成这道题目 *初试化: *新建一个栈, 弹出序列的指针i=0 *过程: * 将入栈队列中的元素按顺序压入栈中, 一旦出现栈顶元素与当前的弹出序列的元素相等, 就循环出栈 循环出栈: 只要满足当前栈顶元素与当前的弹出元素相等就将该元素弹出 *判断结果: ... 阅读全文 »
jz30.包含min函数的栈 发表于 2020-08-14 | 分类于 算法 字数统计: 403 | 阅读时长 ≈ 1 题目描述 题解栈这道题实现的是栈结构, 所以肯定需要一个栈提供基础的功能, 难点在于如何实现一般栈结构无法存在的min功能. 本来想通过堆结构来保存当前的最小值, 但是时间复杂度不够友好, 所以换一个思路, 用另外一个栈作为辅助, 从而实现min功能. 大致思路就是, 当实现添加元素的功能时, 除了 ... 阅读全文 »
jz21.调整数组顺序使奇数位于偶数前面 发表于 2020-08-14 | 分类于 算法 字数统计: 123 | 阅读时长 ≈ 1 题目描述 题解双指针使用双指针的方法, i指针向右遍历整个数组, j 始终指向从左边数第一个偶数的位置, 一旦发现了奇数, 就将两个位置的数字互换, 然后j++ 12345678910111213141516171819public int[] exchange(int[] nums) { ... 阅读全文 »
jz16.数值的整数次方 发表于 2020-08-14 | 分类于 算法 字数统计: 256 | 阅读时长 ≈ 1 题目描述 题解快速幂假设求a^b,按照朴素算法就是把a连乘b次,这样一来时间复杂度是O(n)级,快速幂能做到O(logn)首先把b写成它的二进制形式,设该二进制数第i位的权值为2^(i-1),i * 2^(i-1)是每一次要做的乘方次数那么假设b=11,11的二进制是1011,11 = 2³×1 + ... 阅读全文 »