基本查找算法 - basical searching algorithms
使用java实现并简要分析抽象的基本静态查找算法。notes, learning from algs4.
使用java实现并简要分析抽象的基本静态查找算法。notes, learning from algs4.
快速排序 notes for algs4.
我们关注的主要对象是重新排列数组元素的算法, 其中每个元素都有一个主键。排序算法的目的就是将所有元素的主键按照某种方式排列(通常按照大小或是字母顺序)。
归并排序 notes, learning from algs4.
给出由 N 个小写字母串组成的数组
A
,所有小写字母串的长度都相同。
现在,我们可以选择任何一组删除索引,对于每个字符串,我们将删除这些索引中的所有字符。
举个例子,如果字符串为"abcdef"
,且删除索引是{0, 2, 3}
,那么删除之后的最终字符串为"bef"
。
假设我们选择了一组删除索引D
,在执行删除操作之后,A
中剩余的每一列都是有序的。
形式上,第c
列为[A[0][c], A[1][c], ..., A[A.length-1][c]]
返回D.length
的最小可能值。
- https://leetcode-cn.com/problems/delete-columns-to-make-sorted/(中文)
- https://leetcode.com/problems/delete-columns-to-make-sorted/(en)
示例 1:
输入:[“cba”,“daf”,“ghi”]
输出:1
示例 2:
输入:[“a”,“b”]
输出:0
示例 3:
输入:[“zyx”,“wvu”,“tsr”]
输出:3
提示:
1 <= A.length <= 100
1 <= A[i].length <= 1000
给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。
链接:示例 1:
输入: [1,2,3,4,5,6,7] 和 k = 3
输出: [5,6,7,1,2,3,4]
解释:
向右旋转 1 步: [7,1,2,3,4,5,6]
向右旋转 2 步: [6,7,1,2,3,4,5]
向右旋转 3 步: [5,6,7,1,2,3,4]
示例 2:输入: [-1,-100,3,99] 和 k = 2
输出: [3,99,-1,-100]
解释:
向右旋转 1 步: [99,-1,-100,3]
向右旋转 2 步: [3,99,-1,-100]
说明:尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。
要求使用空间复杂度为 O(1) 的原地算法。
给定 n 个非负整数
a1,a2,...,an
,每个数代表坐标中的一个点(i, ai)
。在坐标内画n
条垂直线,垂直线i
的两个端点分别为(i, ai)
和(i, 0)
。找出其中的两条线,使得它们与x
轴共同构成的容器可以容纳最多的水。
- https://leetcode-cn.com/problems/container-with-most-water/(中文)
- https://leetcode.com/problems/container-with-most-water/(en)
说明:你不能倾斜容器,且 n 的值至少为 2。
示例:
输入: [1,8,6,2,5,4,8,3,7]
输出: 49
给定长度为 2n 的数组, 你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), …, (an, bn) ,使得从1 到 n 的 min(ai, bi) 总和最大。
链接:
- https://leetcode-cn.com/problems/array-partition-i/(中文)
- https://leetcode.com/problems/array-partition-i/(en)
示例 1:
1 | 输入: [1,4,3,2] |
提示:
- n 是正整数,范围在 [1, 10000].
- 数组中的元素范围在 [-10000, 10000].
leetcode
解题思路总结:
给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。
你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。
链接:示例:
1 | 给定 nums = [2, 7, 11, 15], target = 9 |
简单了解Java反射的基本内容。