179.最大数 发表于 2020-08-27 | 分类于 算法 字数统计: 520 | 阅读时长 ≈ 2 题目描述 题解快排这道题得通过排序来做, 如何排序, 也就是排序规则的制定就变成了解题的关键. 如果两个字符串x 和y , 若 x+y < y+x 则定义x>y , 注意, x 和y 都是字符串, 举例说明就是: "30"+"3"<" ... 阅读全文 »
56.合并区间 发表于 2020-08-25 | 分类于 算法 字数统计: 118 | 阅读时长 ≈ 1 题目描述 题解排序首先将所有的数组按照第一个元素的大小进行排序, 然后对每个数组进行遍历, 判断是否进行合并 12345678910111213141516public int[][] merge(int[][] intervals) { int n = intervals.leng ... 阅读全文 »
jz66.构建乘积数组 发表于 2020-08-23 | 分类于 算法 字数统计: 110 | 阅读时长 ≈ 1 题目描述 题解对数组进行遍历两次即可 第一次遍历先把下三角求出, 第二次遍历把上三角的乘积求出 123456789101112131415161718public int[] constructArr(int[] a) { int len = a.length; int[] ... 阅读全文 »
jz65.不用加减乘除做加法 发表于 2020-08-23 | 分类于 算法 字数统计: 176 | 阅读时长 ≈ 1 题目描述 题解因为不能使用加减乘除, 那么只能考虑位运算, 对于二进制下的两个数某位的加法有以下规律 a(i) b(i) 无进位和n(i) 进位c(i+1) 0 0 0 0 0 1 1 0 1 0 1 0 1 1 0 1 观察发现,无进位和 与 异或运算 规律相同,进位 ... 阅读全文 »
jz64.求1+2+...n 发表于 2020-08-23 | 分类于 算法 字数统计: 154 | 阅读时长 ≈ 1 题目描述 题解因为运算符号和循环以及判断语句都不能用. 所以只能考虑逻辑运算符进行计算(&&, ||,!) 对于逻辑运算符有个短路 的性质 AA && BB 若AA为false, 则会直接返回false, 造成BB的短路 AA || BB 若AA为true, 则会 ... 阅读全文 »
jz62.圆圈中最后剩下的数字 发表于 2020-08-23 | 分类于 算法 字数统计: 696 | 阅读时长 ≈ 2 题目描述 题解模拟链表如果使用链表的话由于遍历过程花费巨大, 会造成超出时间限制的情况, 所以这道题使用列表来模拟链表 假设当前删除的位置是 idx,下一个删除的数字的位置是 idx + m 。但是,由于把当前位置的数字删除了,后面的数字会前移一位,所以实际的下一个位置是 idx + m - 1。由 ... 阅读全文 »
jz61.扑克牌中的顺子 发表于 2020-08-23 | 分类于 算法 字数统计: 165 | 阅读时长 ≈ 1 题目描述 题解小根堆这道题的思路是遍历地判断当前地值比上一个值大一,所以保留着单调的顺序, 考虑使用堆结构, 使每一个堆顶的元素都比上一个弹出的元素大一. 如果没有大一, 那么查看是否有0的影响. 123456789101112131415161718192021222324252627public ... 阅读全文 »
jz59_2.队列的最大值 发表于 2020-08-22 | 分类于 算法 字数统计: 243 | 阅读时长 ≈ 1 题目描述 题解辅助队列在第三十题中使用辅助栈的方法完成了最小值的功能, 这道题沿用该辅助结构的思想, 为队列创建一个辅助队列, 每当往主队列中执行入队和出队操作时都要考虑维护辅助栈. 当入队时, 为了保证辅助队列的单调性, 需要先将所有比该数小的元素删除 出队的如果正是辅助队列的最大元素, 那么要将 ... 阅读全文 »
jz59_1.滑动窗口的最大值 发表于 2020-08-21 | 分类于 算法 字数统计: 378 | 阅读时长 ≈ 1 题目描述 题解单调队列之前做过查找栈中最小值的题目, 做法是维护一个辅助的单调栈, 使其栈顶元素始终是主栈中的最小值. 本题的不同点在于主结构为滑动窗口, 那么对应的辅助机构为双端队列, 下面利用单调双端队列来完成题目要求. 每次滑动, 都要将右端元素加入窗口, 左端元素扔出窗口. 为了保持队列的单 ... 阅读全文 »
jz57_2.和为s的连续正数序列 发表于 2020-08-21 | 分类于 算法 字数统计: 276 | 阅读时长 ≈ 1 题目描述 题解滑动窗口这道题要求的是连续子序列, 所以使用滑动窗口的思想比较合适. 滑动窗口由两个指针划出的区域组成, 两个指针只能向同一个方向移动, 在同一时间只能移动一个指针. 当窗口的整数和小于目标值, 就移动右指针, 每移动一次, 窗口的整数和都要增大 当窗口的整数和小于目标值, 就移动左 ... 阅读全文 »