leetcode
twh233
嘻嘻
展开
-
leetcode 三数之和 mid
题目链接可以发现,我们最能想到的办法是n*n*log(n),但有没有办法n*n的办法解决呢,答案是有的:首先我们肯定得枚举一次List,那么还剩下O(n)的复杂度,可以想到我们枚举的List,a + b + c = 0a + b = -c 就当枚举的-c ,我们需要去List里找 a + b,由于List里的数的递增性,我们可以尺取的取出 a + b另左端点在0,右端点在List...原创 2018-12-12 16:09:38 · 276 阅读 · 0 评论 -
leetcode 旋转链表 mid
题目链接链表不能通过index来访问,要一步步的走,所以要麻烦一些。要注意当k大于链表长度时的处理,需要先遍历一遍得到链表长度n,然后k对n取余,用余数来翻转。/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ...原创 2018-12-12 16:59:16 · 210 阅读 · 0 评论 -
leetcode 搜索旋转排序数组 mid
题目链接看到这个O(logN)的复杂度要求,一瞬间就想到二分法。这题说的旋转,实际上就是左右整体互换,也就导致出现了两个递增序列。也就是说当我们二分查找时,有两种可能,一种是选择的部分一个递增序列,而另一种可能选择的部分横跨两个递增序列。我们只要每次处理递增序列那部分就好。 class Solution { public int search(int[] nums, ...原创 2018-12-12 17:10:18 · 141 阅读 · 0 评论 -
leetcode 最大子序和 easy
题目链接题目链接这里提供log(n)的做法。首先二分去找左边的最大子序和,再找右边的最大子序和,再找中间合起来就好了。class Solution { public static int maxSubArray(int[] nums) { if(nums.length == 0) return 0; return solve(nums, 0...原创 2018-12-12 17:21:01 · 131 阅读 · 0 评论 -
leetcode 寻找两个有序数组的中位数 hard
题目链接这篇文章写得很全面:https://www.cnblogs.com/grandyang/p/4465932.html 摘抄如下: 这道题让我们求两个有序数组的中位数,而且限制了时间复杂度为O(log (m+n)),看到这个时间复杂度,自然而然的想到了应该使用二分查找法来求解。但是这道题被定义为Hard也是有其原因的,难就难在要在两个未合并的有序数组之间使用二分法,如果这...原创 2018-12-05 23:31:44 · 1043 阅读 · 0 评论 -
leetcode 相交链表 easy
题目链接链表题基本都要用快慢指针啊,仔细一想,我把headA, headB弄一个环出来,一快一慢,在O(n)的时间内肯定能找到相交点,然而题目的意思是headA, headB已经相交了,那么假如拿B做一个环,那么A最后也会连接上B的开头。再用快慢指针指到相交点就好了。class Solution { public ListNode getIntersectionNode(Li...原创 2018-12-17 19:31:49 · 134 阅读 · 0 评论 -
leetcode 买卖股票 dp
309. 最佳买卖股票时机含冷冻期dp[i][j] i是天数,j是状态,0代表未持有股票,1代表持有股票,2代表冷冻期-prices[i]代表买这一天的股票花的钱class Solution { public int maxProfit(int[] prices) { int n = prices.length; if(n == 0) retu...原创 2019-03-21 16:18:25 · 204 阅读 · 0 评论 -
leetcode 95. 不同的二叉搜索树 II
题目转自这里/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {}...转载 2019-09-16 21:00:06 · 137 阅读 · 0 评论