类似问题模板
去追啊
这个作者很懒,什么都没留下…
展开
-
https://www.nowcoder.com/practice/5427af99168b45f4a14aec195b28a839?tpId=98&&tqId=32999&rp=1&ru=/acti
#include<cstdio>#include<cmath>#include<algorithm>#define maxn 100020#define maxm 200020using namespace std;int tot = 0, n;int fir[maxn], en[maxm], nex[maxm]; int f[maxn][2...原创 2019-10-18 23:50:16 · 6347 阅读 · 5 评论 -
141. Linked List Cycle
判断一个链表中是否有环存在,用集合set来存储# Definition for singly-linked list.# class ListNode(object):# def __init__(self, x):# self.val = x# self.next = Noneclass Solution(object): def...原创 2019-07-12 14:50:43 · 75 阅读 · 0 评论 -
20. Valid Parentheses
class Solution(object): def isValid(self, s): """ :type s: str :rtype: bool """ stack = [] mapping = {')':'(', ']':'[', '}':'{'} for c in s...原创 2019-07-12 16:15:16 · 60 阅读 · 0 评论 -
7. Reverse Integer
java版直观解法:class Solution { public int reverse(int x) { int rev = 0; while (x != 0) { int pop = x % 10; x /= 10; if (rev > Integer.MAX_VAL...原创 2019-07-23 23:00:17 · 88 阅读 · 0 评论 -
54. Spiral Matrix
解法一:模拟实现了按照 顺时针 方向遍历,通过dr、dc数组内元素的顺序实现,第一个元素是[0,1]就会向右不断遍历,第二个元素是[1,0]就会向下遍历,第三个元素是[0,-1]就会向左遍历,第四个元素是[-1,0]就会向上遍历,右下左上就是顺时针的方向。每一次只要下标超出范围,移动方向下标就会加一以改变遍历的方向。class Solution(object): def spir...原创 2019-07-21 10:49:50 · 155 阅读 · 0 评论 -
33. Search in Rotated Sorted Array
先判断target在不在数组中,如果在哪一段也就是确定下标区间之后,就用二分查找,这个是最直白的想法,搂了眼题解应该还有更简便的解法,一次循环既可以找到分割点又可以找到目标值class Solution(object): def search(self, nums, target): """ :type nums: List[int] ...原创 2019-07-21 21:21:47 · 82 阅读 · 0 评论 -
2. Add Two Numbers
官方题解的思路,写得很清晰,截图以便于后续复习# Definition for singly-linked list.# class ListNode(object):# def __init__(self, x):# self.val = x# self.next = Noneclass Solution(object): ...原创 2019-07-23 09:19:54 · 89 阅读 · 0 评论 -
4. Longest Common Prefix
找出一组字符串的最长公共前缀解法一:水平扫描从前往后枚举字符串的每一列,先比较每个字符串相同列的字符(即不同字符串相同下标的字符)然后再进行对下一列的比较。class Solution(object): def longestCommonPrefix(self, strs): """ :type strs: List[str] ...原创 2019-07-23 11:46:30 · 85 阅读 · 0 评论 -
15. 3Sum
三个数的和为0,固定第一个数,然后用双指针。思路:双指针需要先对数组排序,固定最小的数(下标为k),指针 i 在 k → len(nums),指针 j 在 len(nums)- 1 → i,1. nums[ k ] > 0 直接 break 跳出2. k > 0 并且 nums[ k ] == nums[ k - 1 ] 就跳过 nums[ k ], 因为已经把包含 n...原创 2019-10-07 23:08:55 · 70 阅读 · 0 评论 -
16. 3Sum Closest
要求3个数的和与目标最接近 ,可以转换为求2个数+1固定值的和与目标最接近class Solution(object): def threeSumClosest(self, nums, target): """ :type nums: List[int] :type target: int :rtype: int ...原创 2019-07-12 14:17:29 · 87 阅读 · 0 评论 -
142. 环形链表 II
解法一:(set)T:O(n) S:O(n)用一个set遍历链表,无论成环还是不成环,都会遍历所有的节点一次,区别在于若成环会返回一个访问过的节点,不成环会返回null# Definition for singly-linked list.# class ListNode(object):# def __init__(self, x):# self.va...原创 2019-07-12 13:48:23 · 86 阅读 · 0 评论 -
655. Print Binary Tree
数组的column应该是树的高度h * 2 + 1,row就是树的高度following is the best solution I have ever seen:# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, x):# self.val =...原创 2019-03-31 17:51:14 · 95 阅读 · 0 评论 -
122. Best Time to Buy and Sell Stock II
https://leetcode.com/problems/best-time-to-buy-and-sell-stock-ii/solution/Solution 1:TotalProfit=∑i(height(peaki)−height(valleyi))class Solution { public int maxProfit(int[] prices) ...原创 2019-03-31 19:25:10 · 85 阅读 · 0 评论 -
773. Sliding Puzzle
class Solution { public int slidingPuzzle(int[][] board) { int res = 0; String start = ""; String end = "123450"; for(int i = 0 ; i < board.length ; i ++ ) ...原创 2019-04-14 10:37:05 · 104 阅读 · 0 评论 -
15. Kth Largest Element in an Array
class Solution { public int findKthLargest(int[] nums, int k) { k = nums.length - k; int lo = 0; int hi = nums.length - 1; while( lo < hi ){ int j =...原创 2019-06-05 21:48:53 · 102 阅读 · 0 评论 -
11. Container With Most Water
class Solution(object): def maxArea(self, height): """ :type height: List[int] :rtype: int """ i, j = 0, len(height) - 1 water = 0 while i ...原创 2019-06-06 09:48:15 · 101 阅读 · 0 评论 -
23. Merge k Sorted Lists
# Definition for singly-linked list.# class ListNode(object):# def __init__(self, x):# self.val = x# self.next = Noneclass Solution(object): def mergeKLists(self, lists)...原创 2019-06-07 18:35:13 · 84 阅读 · 0 评论 -
53. 最大子序和
核心思路就是看当前最大和大于0还是小于0,如果大于0就并入最大子序列和的候选集,否则就以当前的元素为新序列思路一:动态规划dpnums[i-1]记录当前最大和,若其大于0就可以组成最大序列的候选项,若小于0则nums[i]为新序列class Solution(object): def maxSubArray(self, nums): """ :...原创 2019-06-11 16:22:39 · 113 阅读 · 0 评论 -
26. 删除排序数组中的重复项
快慢指针class Solution(object): def removeDuplicates(self, nums): """ :type nums: List[int] :rtype: int """ l = len(nums) i = 0 for j in rang...原创 2019-06-11 16:45:28 · 93 阅读 · 0 评论 -
88. 合并两个有序数组
官方题解三种思路思路一:将两数组作为一个数组进行排序 nums1[:] = sorted(nums1[:m] + nums2)思路二:双指针从前往后,需要额外的空间思路三:从后往前,最后不要忘了将nums2剩余的元素copy过去class Solution(object): def merge(self, nums1, m, nums2, n): ...原创 2019-06-11 17:05:57 · 108 阅读 · 0 评论 -
347. Top K Frequent Elements
我的想法是把数组排个序,这样相同的数字放在一起只要个数多于k就跳过去数下一个数字,要求还有 time complexity must be better than O(n log n),显然不行==很多类似问题的模板:先用Map记录个数,再用每个桶盛出现次数相同的数字,最后根据桶的索引来确定前K个class Solution { public List<Integer&...原创 2018-11-21 23:26:27 · 80 阅读 · 0 评论