leetcode

LeetCode All in One 题目讲解汇总(持续更新中...)

主宰稳场 提交于 2020-02-05 07:17:04
Design a Tic-tac-toe game that is played between two players on a n x n grid. You may assume the following rules: A move is guaranteed to be valid and is placed on an empty block. Once a winning condition is reached, no more moves is allowed. A player who succeeds in placing n of their marks in a horizontal, vertical, or diagonal row wins the game. Example: Given n = 3, assume that player 1 is "X" and player 2 is "O" in the board. TicTacToe toe = new TicTacToe(3); toe.move(0, 0, 1); -> Returns 0 (no one wins) |X| | | | | | | // Player 1 makes a move at (0, 0). | | | | toe.move(0, 2, 2); ->

力扣20有效的括号题解

邮差的信 提交于 2020-02-04 20:22:45
1.题目 给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。 有效字符串需满足: 1.左括号必须用相同类型的右括号闭合。 2.左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。 来源:力扣(LeetCode) 链接: https://leetcode-cn.com/problems/valid-parentheses 2.想法 先创建一个动态数组作为栈,java中用ArrayList,将所给字符串转化为字符数组,循环遍历该数组,将左括号类型的放入动态数组,若遇到右括号则将对应的左括号从动态数组中删除,最终若动态数组的元素为空则为有效括号返回true,反之亦然。 3.图解 来源:力扣(LeetCode)官方题解 4.注意点 (1)有可能出现单右括号的例子 5.自己题解 class Solution { public boolean isValid ( String s ) { char [ ] a = s . toCharArray ( ) ; ArrayList b = new ArrayList ( ) ; for ( int i = 0 ; i < a . length ; i ++ ) { if ( a [ i ] == '(' || a [ i ] == '[' || a [ i ] == '{' ) { b .

LeetCode应该怎么刷

岁酱吖の 提交于 2020-02-04 15:09:26
leetcode的题按照分类刷,每个分类的题目,解法类似,这样就用一个思路解一类题目了,下面是leetcode的题目分类整理,寒假这些天适合刷题, 目录 1. Pattern: Sliding window,滑动窗口类型 2. Pattern: two points, 双指针类型 3. Pattern: Fast & Slow pointers, 快慢指针类型 4. Pattern: Merge Intervals,区间合并类型 5. Pattern: Cyclic Sort,循环排序 6. Pattern: In-place Reversal of a LinkedList,链表翻转 7. Pattern: Tree Breadth First Search,树上的BFS 8. Pattern: Tree Depth First Search,树上的DFS 9. Pattern: Two Heaps,双堆类型 10. Pattern: Subsets,子集类型,一般都是使用多重DFS 11. Pattern: Modified Binary Search,改造过的二分 12. Pattern: Top ‘K’ Elements,前K个系列 13. Pattern: K-way merge,多路归并 14. Pattern: 0/1 Knapsack (Dynamic

Leetcode 718.最长重复子数组(Maximum Length of Repeated Subarray)

坚强是说给别人听的谎言 提交于 2020-02-04 12:06:23
Leetcode 718.最长重复子数组 1 题目描述( Leetcode题目链接 )   给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。 输入 : A : [ 1 , 2 , 3 , 2 , 1 ] B : [ 3 , 2 , 1 , 4 , 7 ] 输出 : 3 解释 : 长度最长的公共子数组是 [ 3 , 2 , 1 ] 。 2 题解   本题需要注意的是,题目要求返回的是子数组,要求连续,一开始我将其理解为最长子序列,结果一直不对。明确了题目要求连续之后就可以找到状态转移方程: D P [ i ] [ j ] = { D P [ i − 1 ] [ j − 1 ] + 1 i f A [ i ] = = B [ j ] 0 o t h e r w i s e DP[i][j] = \begin{cases} DP[i-1][j-1] + 1&if\ \ A[i]==B[j] \\ 0 &otherwise \end{cases} D P [ i ] [ j ] = { D P [ i − 1 ] [ j − 1 ] + 1 0 ​ i f A [ i ] = = B [ j ] o t h e r w i s e ​ class Solution : def findLength ( self , A : List [ int ] , B :

LeetCode Top Interview Questions 89. Gray Code (Java版; Medium)

回眸只為那壹抹淺笑 提交于 2020-02-04 03:10:52
welcome to my blog LeetCode Top Interview Questions 89. Gray Code (Java版; Medium) 题目描述 The gray code is a binary numeral system where two successive values differ in only one bit. Given a non-negative integer n representing the total number of bits in the code, print the sequence of gray code. A gray code sequence must begin with 0. Example 1: Input: 2 Output: [0,1,3,2] Explanation: 00 - 0 01 - 1 11 - 3 10 - 2 For a given n, a gray code sequence may not be uniquely defined. For example, [0,2,3,1] is also a valid gray code sequence. 00 - 0 10 - 2 11 - 3 01 - 1 Example 2: Input: 0 Output: [0]

Leetcode tree Top Interview Questions 12道题总结

元气小坏坏 提交于 2020-02-04 00:17:53
本篇文章是对leetcode tree和Top Interview Questions标签下12道array类型题目的总结 Leetcode 104. Maximum Depth of Binary Tree 此题需要求一颗二叉树的最大深度,可归结于树的遍历问题 解:使用DFS,添加一个depth参数,每递归一层,depth++,并且每次求最大值 Leetcode 230. Kth Smallest Element in a BST 此题需要求一颗二叉树中第k小的结点,归结于树的遍历问题 解: 根据题目意思,可以从小到大遍历二叉树,那么得到便是一串从小到大的序列,第k个即为所求,所以使用中序,并使用一个数组存储,求第k个即可 如果使用迭代,那么可以不需要遍历整棵树 Leetcode 108. Convert Sorted Array to Binary Search Tree 此题需要将一颗有序数组转换为二叉树,属于树的构建问题 解:使用分治法,取中间的数作为根节点,然后对左右两边采取同样的操作 Leetcode 101. Symmetric Tree 此题需要求一棵树是否为对称树 解:对称问题,可以通过复制本身,然后分别从不同方向遍历来解决! Leetcode 124. Binary Tree Maximum Path Sum 此题需要求一棵树中最大的路径和,属于求树的路径问题

Leetcode 735.行星碰撞(Asteroid Collision)

怎甘沉沦 提交于 2020-02-03 03:11:43
Leetcode 735.行星碰撞 1 题目描述( Leetcode题目链接 )   给定一个整数数组 asteroids,表示在同一行的行星。对于数组中的每一个元素,其绝对值表示行星的大小,正负表示行星的移动方向(正表示向右移动,负表示向左移动)。每一颗行星以相同的速度移动。找出碰撞后剩下的所有行星。碰撞规则:两个行星相互碰撞,较小的行星会爆炸。如果两颗行星大小相同,则两颗行星都会爆炸。两颗移动方向相同的行星,永远不会发生碰撞。 输入 : asteroids = [ 5 , 10 , - 5 ] 输出 : [ 5 , 10 ] 解释 : 10 和 - 5 碰撞后只剩下 10 。 5 和 10 永远不会发生碰撞。 输入 : asteroids = [ 10 , 2 , - 5 ] 输出 : [ 10 ] 解释 : 2 和 - 5 发生碰撞后剩下 - 5 。 10 和 - 5 发生碰撞后剩下 10 。 输入 : asteroids = [ - 2 , - 1 , 1 , 2 ] 输出 : [ - 2 , - 1 , 1 , 2 ] 解释 : - 2 和 - 1 向左移动,而 1 和 2 向右移动。 由于移动方向相同的行星不会发生碰撞,所以最终没有行星发生碰撞。 2 题解   使用栈来解决这个问题,遍历数组: 如果栈空或当前数大于0,则入栈; 如果当前数小于0

Leetcode C++《热题 Hot 100-20》617.合并二叉树

一世执手 提交于 2020-02-03 00:37:54
Leetcode C++《热题 Hot 100-20》617.合并二叉树 题目 给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。 你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。 示例 1: 输入: Tree 1 Tree 2 1 2 / \ / \ 3 2 1 3 / \ \ 5 4 7 输出: 合并后的树: 3 / 4 5 / \ \ 5 4 7 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/merge-two-binary-trees 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 思路 树我就喜欢用递归大法hh 方案1:时间复杂度和空间复杂度都为n 方案2:使用队列,层次遍历,把tree1和tree2的节点相加;时间空间复杂度还是n,和方案1相差不大hh 每次从两个树中各取一个节点(记为node1, node2)入队; 出队时将两个节点值相加,并判断node1和node2的左子树是否为空,若两个左子树都不空,直接入队;若有一个为空,新建一个val为0的节点,然后入队;若两个的左子树都为空,pass。参考链接 https://leetcode-cn

Java学习

此生再无相见时 提交于 2020-02-03 00:26:56
转载自 知乎 知识点相关 JavaGuide Github地址: https://github.com/Snailclimb/JavaGuide star: 64.0k 介绍: 【Java学习+面试指南】 一份涵盖大部分Java程序员所需要掌握的核心知识。 CS-Notes Github 地址: https://github.com/CyC2018/CS-Notes Star: 68.3k 介绍: 技术面试必备基础知识、Leetcode 题解、后端面试、Java 面试、春招、秋招、操作系统、计算机网络、系统设计。 advanced-java Github地址: https://github.com/doocs/advanced-java star: 23.4k 介绍: 互联网 Java 工程师进阶知识完全扫盲:涵盖高并发、分布式、高可用、微服务等领域知识,后端同学必看,前端同学也可学习。 .JCSprout Github地址: https://github.com/crossoverJie/JCSprout star: 21.2k 介绍: Java Core Sprout:处于萌芽阶段的 Java 核心知识库。 toBeTopJavaer Github地址: https://github.com/hollischuang/toBeTopJavaer star: 4.0 k 介绍:

[LeetCode] 350. 两个数组的交集 II

邮差的信 提交于 2020-02-02 20:36:55
1 题目描述 给定两个数组,编写一个函数来计算它们的交集。 示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2,2] 示例 2: 输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4] 输出: [4,9] 说明: 输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。 我们可以不考虑输出结果的顺序。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/intersection-of-two-arrays-ii 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 2 解题思路 当输入数据是有序的,推荐使用此方法。在这里,我们对两个数组进行排序,并且使用两个指针在一次扫面找出公共的数字。 算法: 对数组 nums1 和 nums2 排序。 初始化指针 i,j 和 k 为 0。 指针 i 指向 nums1,指针 j 指向 nums2: 如果 nums1[i] < nums2[j],则 i++。 如果 nums1[i] > nums2[j],则 j++。 如果 nums1[i] == nums2[j],将元素拷贝到 nums1[k],且 i++,j++,k++。 返回数组 nums1 前 k 个元素。 作者:LeetCode 链接