LeetCode
LeetCode中所做过的题目,在其中整理自己的思路,并将每一个分类做一个总结
AdvancedPawn
这个作者很懒,什么都没留下…
展开
-
数组中的第K个最大元素(堆的讲解)
在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4我的方案代码class Solution { public int findKthLarges...原创 2019-10-14 17:39:40 · 925 阅读 · 0 评论 -
合并K个排序链表
合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例:输入:[1->4->5,1->3->4,2->6]输出: 1->1->2->3->4->4->5->6我的方案思路效率最差但是有效的暴力破解。算法先遍历参数ListNode数组的每一个链表,将链表每一个结点都放入新建的li...原创 2019-10-16 17:58:01 · 121 阅读 · 0 评论 -
下一个更大元素
给定两个没有重复元素的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。找到 nums1 中每个元素在 nums2 中的下一个比其大的值。nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一个比 x 大的元素。如果不存在,对应位置输出-1。示例 1:输入: nums1 = [4,1,2], nums2 = [1,3,4,2].输...原创 2019-10-10 17:26:44 · 106 阅读 · 0 评论 -
旋转数组(环形替换)
给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。示例 1:输入: [1,2,3,4,5,6,7] 和 k = 3输出: [5,6,7,1,2,3,4]解释:向右旋转 1 步: [7,1,2,3,4,5,6]向右旋转 2 步: [6,7,1,2,3,4,5]向右旋转 3 步: [5,6,7,1,2,3,4]示例 2:输入: [-1,-100,3,99] 和 ...原创 2019-09-30 17:48:10 · 3397 阅读 · 2 评论 -
移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]我的方案思路将这道题分成三个步骤来做:数0的个数将非零元素赋值到集合中添0,并将集合赋值到数组中代码 public void moveZeroes(int[] nums){ int zeroCount...原创 2019-10-08 19:23:34 · 90 阅读 · 0 评论 -
第三大的数
给定一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数。要求算法时间复杂度必须是O(n)。示例 1:输入: [3, 2, 1]输出: 1解释: 第三大的数是 1.示例 2:输入: [1, 2]输出: 2解释: 第三大的数不存在, 所以返回最大的数 2 .我的方案思路原本我使用了Arrays.sort()方法,但是这种堆排序的时间复杂度是O(nlogn)...原创 2019-10-09 18:02:50 · 92 阅读 · 0 评论 -
找出数组中消失的数字
给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。找到所有在 [1, n] 范围之间没有出现在数组中的数字。不使用额外空间且时间复杂度为O(n)的情况下完成这个任务,假定返回的数组不算在额外空间内。示例:输入:[4,3,2,7,8,2,3,1]输出:[5,6]我的方案思路这里我是用了常规做法,使用哈...原创 2019-10-09 19:13:49 · 465 阅读 · 1 评论 -
最小栈
设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。方法:push(x) – 将元素 x 推入栈中。pop() – 删除栈顶的元素。top() – 获取栈顶元素。getMin() – 检索栈中的最小元素。示例:MinStack minStack = new MinStack();minStack.push(-2);minStack.push(0);...原创 2019-10-10 15:57:17 · 2479 阅读 · 2 评论 -
求众数
给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在众数。示例 1:输入: [3,2,3]输出: 3示例 2:输入: [2,2,1,1,1,2,2]输出: 2我的方案思路题目要求找到众数,即为数组中重复次数最多的值。那么可以利用哈希表键唯一的特性,将重复次数作为键存储。算法建立哈希...原创 2019-09-28 17:45:27 · 570 阅读 · 0 评论 -
两数之和 II - 输入有序数组
给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。说明:返回的下标值(index1 和 index2)不是从零开始的。你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。示例:输入: numbers = [2, 7, 11, 15], targe...原创 2019-09-28 16:48:10 · 440 阅读 · 0 评论 -
买卖股票的最佳时机
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。注意你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不能是...原创 2019-09-26 10:21:18 · 108 阅读 · 0 评论 -
搜索插入位置(附二分法模板)
题目:给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。我的方案:思路我把这个题分成两部分,第一部分是查询是否有这个数字,因为数组无重复,所以使用哈希表。第二部分是,查找这个数字应该插入的位置。算法先建立一个map集合,将数组的值作为键,数组的索引作为值。当查找不到值时,在数组中从头遍历比...原创 2019-09-12 16:43:26 · 208 阅读 · 0 评论 -
最大子序和
定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。我的方案:思路一第一个想法是暴力破解,使用两个循环,第一个循环用来滑动起始索引,第二个循环用来滑动结束索引。代码class Solution { ...原创 2019-09-18 19:27:59 · 77 阅读 · 0 评论 -
加一
给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例 1:输入: [1,2,3]输出: [1,2,4]解释: 输入数组表示数字 123。示例 2:输入: [4,3,2,1]输出: [4,3,2,2]解释: 输入数组表示数字 4321。我的方案思路...原创 2019-09-19 11:42:42 · 94 阅读 · 0 评论 -
合并两个有序数组
给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。说明:初始化 nums1 和 nums2 的元素数量分别为 m 和 n。你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。示例:输入:nums1 = [1,2,3,0,0,0], m = 3nums2 =...原创 2019-09-19 13:08:08 · 546 阅读 · 0 评论 -
杨辉三角
给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。在杨辉三角中,每个数是它左上方和右上方的数的和。示例:输入: 5输出:[[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]我的方案思路杨辉三角显然是上一行相对的左元素和右元素之和,那么循环到每一行加上上一行这两个值即可。这个题是属于动态规划的范畴,我这里没有使用临...原创 2019-09-19 15:06:04 · 2070 阅读 · 1 评论 -
反转链表二
反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。说明:1 ≤ m ≤ n ≤ 链表长度。示例:输入: 1->2->3->4->5->NULL, m = 2, n = 4输出: 1->4->3->2->5->NULL官方方案(递归法)思路使用递归算法,给定m、n变量,每次递归时递减,当n=1时回溯。这样利...原创 2019-09-22 14:34:34 · 209 阅读 · 0 评论 -
两数之和
题目:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。我的思路:遇到这个题,第一个想法就是暴力破解,使用双重循环遍历我的解法:java:class Solution { public int[] twoSum(int[] ...原创 2019-09-09 19:47:18 · 204 阅读 · 0 评论