
leetcode
进阶的小强
这个作者很懒,什么都没留下…
展开
-
leetcode48:Rotate Image
题目描述:给一个n*n的二维数组的图像,将其顺时针旋转90°后输出。注意:必须in-place旋转,即直接在该数组上修改,不得重新分配一个数组。例如:1 2 34 5 67 8 9旋转90°后:7 4 18 5 29 6 3思路:1.首先将给定二维数组转置1 4 72 5 83 6 92.再对每一行求逆序7 4 1 8 5 29 6 3代码如下:c...原创 2019-08-03 19:49:14 · 150 阅读 · 0 评论 -
leetcode26&&80:Remove Duplicates from Sorted Array&&II
题目:leetcode26:给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。**leetcode80:**给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入...原创 2019-08-13 09:22:58 · 147 阅读 · 0 评论 -
leetcode81:Search in Rotated Sorted Array II
题目:假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,0,1,2,2,5,6] 可能变为 [2,5,6,0,0,1,2] )。编写一个函数来判断给定的目标值是否存在于数组中。若存在返回 true,否则返回 false。思路:由于无法确定target,nums[mid]谁大谁小,以及target和nums[mid]到底在前半段,还是在后一段,不同的情况下,对于令...原创 2019-08-13 09:48:16 · 117 阅读 · 0 评论 -
leetcode88:合并两个排序的数组
题目:给定两个有序整数数组 nums1 和 nums2 ,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。说明: 初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。 你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n )来保存 nums2 中的元素。示例:输入: nums1 = ...原创 2019-08-13 10:04:52 · 212 阅读 · 0 评论 -
leetcode121&&122:Best Time to Buy and Sell Stock &&II
leetcode121题目:给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。注意你不能在买入股票前卖出股票。思路很简单,动态规划思想,直接上代码;class Solution { public int maxProfit(int[] prices) { int...原创 2019-08-17 12:53:43 · 112 阅读 · 0 评论 -
leetcode120:Triangle
注意:每一步只能移动到下一行中相邻的结点上。题目要求只能使用O(n)的额外空间来解决问题。思路:这是一个典型的动态规划问题,下一个节点只能通过上一层节点左侧或者右侧;我们可以得到递推式:minPath[i] = 当前点值 + min(上一层的左边点值, 上一层的右边点值)我们从底到上一次遍历。’代码如下:class Solution { public int minimumT...原创 2019-08-17 13:17:58 · 126 阅读 · 0 评论 -
leetcode153:Find Minimum in Rotated Sorted Array
题目:假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。请找出其中最小的元素。你可以假设数组中不存在重复元素。示例 1:输入: [3,4,5,1,2]输出: 1示例 2:输入: [4,5,6,7,0,1,2]输出: 0思路:看到有序数组应该第一反应想到二分查找,当然啦,这题的你...原创 2019-08-18 15:06:15 · 150 阅读 · 0 评论 -
leetcode7:Reverse Integer
题目:Reverse digits of an integer.Example1: x = 123, return 321Example2: x = -123, return -321思路:这道题的关键点就在于当反转之后溢出的判断。代码如下:class Solution { public int reverse(int x) { //int的范围-2147483...原创 2019-08-23 13:11:29 · 131 阅读 · 0 评论 -
leetcode9: Palindrome Number
题目:判断一个数字是否是回文数。直接上代码:class Solution { public boolean isPalindrome(int x) { if(x<0) return false; int res=0; int temp=x; while(x!=0){ res=res * 10+x % 10; ...原创 2019-08-23 13:48:28 · 127 阅读 · 0 评论 -
leetcode22:Generate Parentheses
题目:给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。思路:我们可以采用回溯法,只有在序列仍然保持有效时才添加 ‘(’ or ‘)’,通过跟踪到目前为止放置的左括号和右括号的数目来做到这一点,如果我们还剩位置,我们可以开始放一个左括号。 如果它不超过左括号的数量,我们可以放一个右括号。代码如下:class Solution { publ...原创 2019-08-26 14:13:05 · 136 阅读 · 0 评论 -
leetcode38: Count and Say
题目描述起来有点费事,1说出来就是1个1,所以是输出11,11说出来是2个1,所以是21…我们把当前字符和前一个字符比较,并用count给这个数字计数,如果相等则不添加并count+1,继续后后面的字符比较直到不相等为止,添加count和该数字。代码如下:class Solution { public String countAndSay(int n) { if(n...原创 2019-08-27 14:32:27 · 157 阅读 · 0 评论 -
leetcode43:Multiply Strings
题目:给定两个数字表示的字符串,输出其相乘后的结果。思路:第一个字符串的第i位乘以第二个字符串的第j位一定是结果的第i+j位,如果i+j已经有值,直接加上去就OK,并用保存进位。代码如下:class Solution { public String multiply(String num1, String num2) { int m=num1.length(),n...原创 2019-08-28 13:35:54 · 124 阅读 · 0 评论 -
leetcode49:Group Anagrams
思路:我们可以采取暴力遍历的方法进行查找,符合条件的添加进去;我们还可以用一个map的key存取字符串,value存取由该字符串的字符组合的变形。代码如下:class Solution { public List<List<String>> groupAnagrams(String[] strs) { if(strs==null||strs....原创 2019-08-29 14:25:07 · 135 阅读 · 0 评论 -
leetcode24. Swap Nodes in Pairs
题目:将链表的节点两两交换;思路:用三个指针指向当前current,当前指针的下一个first,当前指针的下下一个second;然后改变它们的指向,达到我们的要求即可。代码如下:/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next;...原创 2019-08-31 15:45:51 · 116 阅读 · 0 评论 -
leetcode61:61. Rotate List
题目:给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。示例 1:输入: 1->2->3->4->5->NULL, k = 2输出: 4->5->1->2->3->NULL解释:向右旋转 1 步: 5->1->2->3->4->NULL向右旋转 2 步: 4->...原创 2019-08-31 17:48:23 · 127 阅读 · 0 评论 -
leetcode82: Remove Duplicates from Sorted ListII
题目:给定一个排好序的链表,移除它所有重复的元素,返回那些独一无二的元素;Example 1:Input: 1->2->3->3->4->4->5Output: 1->2->5Example 2:Input: 1->1->1->2->3Output: 2->3思路:使用两个指针,一个指向前一个元素,另一...原创 2019-08-31 21:00:07 · 99 阅读 · 0 评论 -
leetcode83:Remove Duplicates from Sorted List
题目:给定一个排好序的链表,使重复的元素仅出现一次;例如:Example 1:Input: 1->1->2Output: 1->2Example 2:Input: 1->1->2->3->3Output: 1->2->3思路:我们可以直接在原链表上操作,判断当前节点和它下一个节点是否相等,相等的话就跳过,否则就添加。/**...原创 2019-08-31 21:41:11 · 104 阅读 · 0 评论 -
leetcode3:Longest Substring Without Repeating Characters
题目:给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1: 输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。思路:简单做法遍历所有的子串,然后再判断子串是否包含重复字符,很容易会超时。另一种做法,用HashMap存取,第一个键存字符,第二个值存该字符对应的索引;使用两个指针确定一个window,每次向m...原创 2019-08-21 15:11:14 · 103 阅读 · 0 评论 -
二分查找
二分查找:时间复杂度:O(logn)条件:二分查找的表为有序表查询区间:[low,high]中位数:mid=low+(high-low)/2终结t条件:low>high,即搜索为空(while(low<=high)),满足终止条件后,返回值直接返回low.二分查找的过程是一个维护low的过程,low从0开始,一直朝着第一个目标逼近,直到到达。1.元素区间内不存在重复值代码...原创 2019-08-12 13:04:23 · 125 阅读 · 0 评论 -
leetcode 20:Valid Parentheses
题目:给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1: 输入: “()” 输出: true示例 2: 输入: “()[]{}” 输出: true示例 3: 输入: “(]” 输出: false示例 4: ...原创 2019-08-25 14:29:47 · 90 阅读 · 0 评论 -
leetcode 39:combinationSum
给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。https://leetcode.com/problems/combination-sum/说明:candidates 中的数字可以无限制重复被选取。所有数字(包括 target)都是正整数。解集不能包含重复的组合。示例 1:输入: c...原创 2019-08-03 17:11:38 · 2213 阅读 · 0 评论 -
leetcode56:合并区间
题目:给一个区间的集合,然后合并有重叠的区间;例如:输入: [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].思路:1.首先按每个区间的第一个数字排序集合;时间复杂度为O(nlogn);2.对比每两个区间,若有重叠就合并;否则的话就直接添加;cla...原创 2019-08-09 11:29:50 · 198 阅读 · 0 评论 -
leetcode54&&59 Spiral Matrix I &&II
螺旋矩阵I和II螺旋矩阵I给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。示例 1:输入:[[ 1, 2, 3 ],[ 4, 5, 6 ],[ 7, 8, 9 ]]输出: [1,2,3,6,9,8,7,4,5]螺旋矩阵II例如:输入: 3输出:[[ 1, 2, 3 ],[ 8, 9, 4 ],[ 7, 6,...原创 2019-08-09 12:40:59 · 100 阅读 · 0 评论 -
leetcode90:子集II
题目:给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: [1,2,2]输出: [ [2], [1], [1,2,2], [2,2], [1,2], [] ]思路:这个题目时leetcode78题的一个变形,第78题要求给定数组不能存在重复的元素,这个题目可以有重复的元素。同样采用回溯算法,...原创 2019-08-14 09:07:58 · 117 阅读 · 0 评论 -
leetcode62&&63 unique paths I&&II
leetcode62题目描述:一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?leetcode63题目描述:一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向...原创 2019-08-09 17:40:16 · 172 阅读 · 0 评论 -
leetcode162:Find Peak Element
题目:峰值元素是指其值大于左右相邻值的元素。给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位置即可。你可以假设 nums[-1] = nums[n] = -∞。思路:关键点:nums[-1] = nums[n] = -∞,第一个元素和最后一个元素都是负无穷,我们得出只要存在着一...原创 2019-08-19 13:33:39 · 126 阅读 · 0 评论 -
leetcode167:Two Sum II - Input array is sorted
题目:给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。说明:返回的下标值(index1 和 index2)不是从零开始的。你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。思路:刚拿到这个题目很容易想到使用二分查找,temp=target-...原创 2019-08-19 13:44:37 · 129 阅读 · 0 评论 -
leetcode73:二维数组置零
题目:给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。例如:输入:[ [1,1,1], [1,0,1], [1,1,1]]输出[ [1,0,1], [0,0,0], [1,0,1]]思路:题目要求in_place,这样的话就不能再另开辟空间作为标记;我们只能在原有的数组上进行标记。1.检查第一...原创 2019-08-10 15:16:06 · 820 阅读 · 1 评论 -
leetcode64:最小路径和
题目:思路:典型的动态规划的问题,从左上角到右下角,当在最左边时,只能向下移动;当在最上边时,只能向下移动。分三种情况,最左边,最上边和中间的位置;代码如下:class Solution{ public int minPathSum(int[][] grid) { int row=grid.length; int col=grid[0].length; for(int i=1...原创 2019-08-10 15:34:35 · 163 阅读 · 0 评论 -
leetcode66:plusOne
给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。思路:leetcode中easy类型,关键点在于数组中的数字9的处理。我们可以从后向前循环遍历,遇到9将其设为0,并将前一个元素加一;代码如下:class Solution{ public int[] plu...原创 2019-08-10 15:50:07 · 129 阅读 · 0 评论 -
leetcode105&&106:重构二叉树
题目:给出一个二叉树的前序(后序)和中序遍历的数组,请你重构出这个二叉树;复习一下二叉树的知识:儿茶素是由n个节点的有限集合,该集合为空集或者由一个根节点和两颗互不相交的左子树和右子树组成;二叉树的性质:1)在二叉树的第i层最多有2^(i-1)个节点;2)如果一颗二叉树的深度为k,那么最多有(2^k)-1个节点;以及各种二叉树的种类,请参考: https://zhuanlan.zh...原创 2019-08-15 13:46:25 · 162 阅读 · 0 评论 -
leetcode118&&119:Pascal's Triangle&&II
leetcode118题目:给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。在杨辉三角中,每个数是它左上方和右上方的数的和。思路:题目采用动态规划来做代码如下:class Solution { public List<List<Integer>> generate(int numRows) { List<List...原创 2019-08-15 14:01:47 · 91 阅读 · 0 评论 -
leecode 14: Longest Common Prefix
题目:编写一个函数,当输入一个字符串数组时返回其最长的公共前缀字符串思路:依次比较,当有不相等时便返回。代码如下:class Solution { public String longestCommonPrefix(String[] strs) { if(strs==null||strs.length==0) return ""; ...原创 2019-08-24 15:15:48 · 89 阅读 · 0 评论 -
leetcode75:颜色分类
题目:给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。注意: 不能使用代码库中的排序函数来解决这道题。思路:我们可以第一趟遍历获得0、1、2的个数,然后再修改数组即可;但是,题目要求 in-palce排序,这样我们只能在原地检查哪些是0、1、2...原创 2019-08-12 09:56:32 · 105 阅读 · 0 评论 -
leetcode78:子集
题目:给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。例如:输入:nums = [1,2,3]输出:[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]思路:采用回溯算法;回溯算法的思想是:从一条路往前走,能进则进,不能进则退回来,换一条路再试。用回溯算法解决问题的一般步骤为:...原创 2019-08-12 10:26:16 · 181 阅读 · 0 评论 -
leetcode79:单词搜索
题目:给定一个二维网格和一个单词,找出该单词是否存在于网格中。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。例如:board = [ [ 'A' , 'B' , 'C' , 'E' ], [ 'S' , 'F' , 'C' , 'S' ], [ 'A' , 'D' ,...原创 2019-08-12 11:00:03 · 149 阅读 · 0 评论 -
leetcode108&&leetcode109
leetcode108题目:给定一个数组,其中元素按升序排序,将其转换为高度平衡的BST。高度平衡的二叉树被定义为二叉树,其中每个节点的两个子树的深度从不相差超过1。思路:首先找到数组的中点,将中点作为根节点,中点的左边作为根节点的左子树,根节点的右边作为根节点的右子树;递归生成根节点以及根节点的左子树和右子树leetcode109题目:给定一个链表,其中链表的元素按升序排序,将...原创 2019-09-01 16:21:28 · 206 阅读 · 0 评论