这道题首先要想到双指针的解法。定义左边界为起点 0,右边界为最右的位置。定义一个 ans 来记录最大值的答案顺便初始化为 0,当左边界小于右边界时进入循环。...
利用 set 的不可重复的特性,将数组所有元素添加到 hashSet 中,若 hashSet.add(num) == false 则证明有重复元素,返回 true,反之返回 false。
斐波那契数列的特性: F(0) = 0,F(1) = 1,当 n < 2 时,F(n) = F(n - 1) + F(n - 2),其中 n > 1
image.pngJAVA解法class Solution { List<String> res = new ArrayList<>(); public List<String> generateParenthesis(int n) { dfs(n, n, ""); ...
利用二分查找法,定义左右两个边界,只要左边界小于右边界则证明存在还没猜对,进行二分取中点,要用 mid = left + (right - left) / 2 这种是因为使用 mid = (left + right) / 2 可能存在溢出的情况。...
image.pngimage.pngimage.pngJAVA解法public class Solution { public ListNode getIntersectionNode(ListNode headA, ListNode headB) { // 你们出生自两个不同的家庭 ...
这道题可以用优先队列建立小根堆,将所有数加入到小根堆中,并限制小根堆的个数为 k,因此最大的数在最下边,第 k 大的数就是堆顶的数,返回堆顶的数即可。...
先用 trim() 方法把 s 前后的空格去掉,然后用总长度减去最后一个空格的位置,记得还得减去 1 才是真正的长度,因为 s.length() 算的不是索引,因此长度多了 1。...
这是一道求树的深度的题目,思路为先分别求左右子树的最大深度再取最大值即为最大深度。
这道题非常有趣,好像在玩游戏,首先得理解好这道题的意图。下一个排列,我们可以理解为数字排列的下一个值,即大一点但无固定的尺度,即使用已有的数字排列。...