Leetcode
Leo木
这个作者很懒,什么都没留下…
展开
-
Leetcode解题思路
1、理解题意读懂题目要求:要实现什么功能案例分析注意限制条件(时间复杂度、空间复杂度)2、单步运行这一步以数据结构和常用算法的掌握为前提,需要通过大量刷题来提升解题的敏感度。生成解题思路分析基本示例考虑常用的算法思路筛选出符合题意的算法思路3、抽象化抽象化算法行为分析给出的算法为什么符合题意4、编码这一步建立在掌握对应语言和API的基础上,是从‘抽象到具体’的过程。将算法的行为具体化成实际代码得到初始代码5、测试考虑以下情况:边界条件数组越原创 2020-09-06 19:45:02 · 241 阅读 · 0 评论 -
LeetCode21 合并两个有序链表
遍历法/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this.next = next; }.原创 2020-07-30 10:56:35 · 68 阅读 · 0 评论 -
Leetcode 20 有效的括号
问题描述:给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足1)左括号必须用相同类型的右括号闭合2)左括号必须以正确的顺序闭合3)空字符例:输入: “()”输出: true思路:简单题,直接使用栈,左括号直接入栈,遇到右括号时判断括号是否匹配,匹配则将栈顶元素出栈,继续匹配;否则失败。class Solution { public boolean isValid(String s) { if(s == nu原创 2020-07-08 18:47:44 · 96 阅读 · 0 评论 -
Leetcode19 删除链表的倒数第N个节点
问题描述:给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.思想:双指针比较容易想到双指针解法,设置两个指针间隔为n,当后一个指针到达尾结点,表示前一个节点到达所要删除的位置,把该节点的后指针指向原后节点的后一节点即可。回溯法通过递归先遍历到最深,在回溯的时候通过计数找到目标指针,修改指针的指向。/原创 2020-07-01 09:55:55 · 101 阅读 · 0 评论 -
Leetcode17 电话号码的数字组合
问题描述:给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例:输入:“23”输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].思考:可以看出,输入一个数字,有3种结果;输入2个数字,有32种结果;归纳可得对于n (0<n<9) 个数字来说,输出应该有3n个结果。显然简单的循环(nk)无法满足这一要求,容易联想到树结构,完全树的第原创 2020-06-30 17:38:35 · 168 阅读 · 0 评论 -
LeetCode45 跳跃游戏II
问题描述:给定一个非负整数数组,你最初位于数组的第一个位置,数组中的每个元素代表你在该位置可以跳跃的最大长度,你的目标是使用最少的跳跃次数到达数组的最后一个位置。注:该问题为跳跃游戏的升级版思想:自顶向下动态规划类似版本一中自顶向下动态规划,但将信息表改为到达尾位置所需的步数,如果不可达赋值为MAX。时间复杂度:o(n2)空间复杂度:o(n)//自顶向下动态规划cla...原创 2020-02-29 10:39:54 · 350 阅读 · 0 评论 -
Leetcode55 跳跃游戏
//递归回溯class Solution { public boolean canJump(int[] nums) { if(nums.length < 2) return true; return jump(nums, 0); } public boolean jump(int[] nums, int index){ ...原创 2020-02-29 10:40:59 · 180 阅读 · 0 评论 -
LeetCode48 旋转图像
问题描述:给定一个 n × n 的二维矩阵表示一个图像,将图像顺时针原地旋转 90 度。例:给定 matrix =[[1,2,3],[4,5,6],[7,8,9]],原地旋转输入矩阵,使其变为:[[7,4,1],[8,5,2],[9,6,3]]//按层次旋转每个元素class Solution { public void rotate(int[][] mat...原创 2020-02-29 10:40:22 · 144 阅读 · 0 评论 -
LeetCode53 最大子序和
//贪心法class Solution { public int maxSubArray(int[] nums) { if(nums.length == 0 || nums == null) return 0; int max = nums[0],sum = nums[0]; for(int i = 1; i < nums.le...原创 2020-02-29 10:40:44 · 69 阅读 · 0 评论 -
LeetCode42 接雨水
问题描述:给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。例:输入: [0,1,0,2,1,0,1,3,2,1,2,1];输出: 6思路:暴力法(按列求解)栈双指针//java//暴力法class Solution { public int trap(int[] height) { int len ...原创 2020-01-13 20:17:42 · 239 阅读 · 0 评论 -
LeetCode41 缺失的第一个正数
问题描述:给定一个未排序的整数数组,找出其中没有出现的最小的正整数。例:输入: [1,2,0];输出: 3输入: [7,8,9,11,12];输出: 1思路:通过改变数组中的元素来判断数组包含正数的情况。step 1: 遍历判断是否存在1,若没有,直接返回1;否则进入第二步step 2: 判断长度是否为1,若为1,说明只存在1一个元素,返回2step 3: 由于数组个数为n,故可能...原创 2020-01-11 19:09:22 · 119 阅读 · 0 评论 -
LeetCode39 组合总和
问题描述:给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。例:输入: candidates = [2,3,6,7], target = 7。所求解集为:[ [7], [2,2,3] ]注:candidates 中的数字可以无限制重复被选取所有数字(包括 target)都是正整数。解集...原创 2020-01-11 19:12:03 · 148 阅读 · 0 评论 -
LeetCode35 搜索插入位置
问题描述:给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。例:输入: [1,3,5,6], 5;输出: 2思路:直接遍历时间复杂度:o(n)空间复杂度:o(1)二分查找类似与查找左边界时间复杂度:o(log n)空间复杂度:o(1)//java//直接遍历class Solution...原创 2020-01-06 19:08:14 · 168 阅读 · 0 评论 -
LeetCode34 在排序数组中查找元素的第一个和最后一个位置
问题描述:给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是 O(log n) 级别。如果数组中不存在目标值,返回 [-1, -1]。例:输入: nums = [5,7,7,8,8,10], target = 8;输出: [3,4]思路:二分查找二分查找一般分为几种情况:查找某个值初始化:le...原创 2020-01-05 20:30:15 · 63 阅读 · 0 评论 -
LeetCode33 搜索旋转排序数组
问题描述:假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。例:输入: nums = [4,5,6,7,0,1,2], target = 0;输出: 4注:你可以假设数组中不存在重复的元素。你的算法时间复杂...原创 2020-01-04 19:52:55 · 62 阅读 · 0 评论 -
LeetCode31 下一个排列
问题描述:实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。例:1,2,3 → 1,3,2;3,2,1 → 1,2,3思路:字典序算法这道题需要用到字典序的概念,基于此概念,直接进行求解。时间复杂度:o(n)空间复杂度:o(1)class Solution { pu...原创 2020-01-03 20:44:45 · 74 阅读 · 0 评论 -
LeetCode27 移除元素
问题描述:给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。例:给定 nums = [3,2,2,3], val = 3,函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。不需要考虑数组中超出新长度后面的元素。思路:双指针(类...原创 2020-01-03 16:42:27 · 79 阅读 · 0 评论 -
LeetCode26 删除排序数组的重复项
问题描述:给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。例:给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。思路:双指针法设置前后指针,前指针指向即将修改的元素,后指针遍历,...原创 2020-01-03 16:22:16 · 54 阅读 · 0 评论 -
LeetCode18 四数之和
问题描述:给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。例:给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。满足要求的四元组集合为:[ [-1, 0, 0, 1], [...原创 2020-01-01 15:07:48 · 89 阅读 · 0 评论 -
LeetCode16 最接近的三数之和
问题描述:给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。例:给定数组 nums = [-1,2,1,-4] 和 target = 1与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).思路:暴力遍历法step1 : (判断...原创 2019-12-22 17:12:46 · 87 阅读 · 0 评论 -
LeetCode15 三数之和
问题描述:给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。例如nums = [-1, 0, 1, 2, -1, -4],满足的三元组集合为[[-1, 0, 1], [-1, -1, 2]]。思路:暴力遍历直接穷举解空间,找到所有满足的三元组,同时去除重复元组。时间复杂度...原创 2019-12-20 13:32:59 · 71 阅读 · 0 评论 -
LeetCode11 盛水最大容器
思路:暴力求解直接暴力枚举每种情况,找出最大面积时间复杂度:o(n2)空间复杂度:o(1)双指针法设置两个指针(引用)指向首尾元素,设置最大面积maxarea,每次将指向较短元素的指针移向另一个指针,在移动的过程中更新数组。(由于较短元素限制了面积,向内移动会使距离变小,移动较短元素不会使结果变得更差,因此每次移动较小元素。反之,若每次移动较大元素只会使结果变小,因为距...原创 2019-12-14 10:13:26 · 199 阅读 · 0 评论 -
Leetcode04寻找两个有序数组的中位数
问题描述:给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。思路:暴力求解.通过直接对数组遍历排序,从新数组中直接计算中位数。时间复杂度:m+n空间复杂度:o(m+n)数组遍历不对数组进行重新组合,直接在遍历过程中计算位置(分奇偶)。时间复杂度:o(m+n)空间复...原创 2019-10-19 16:32:04 · 227 阅读 · 0 评论 -
Leetcode01 两数之和
Leetcode01 两数之和问题描述:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。//暴力求解(cpp)class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { ...原创 2019-10-11 16:00:10 · 316 阅读 · 5 评论 -
LeetCode05:最大回文子串
问题描述:给定一个字符串,找到字符串中的最长回文子串。思路:暴力求解描述:枚举所有子串,判断是否为回文子串,并设置全局最大长度回文子串,在遍历过程中不断更新。时间复杂度:o(n3)空间复杂度:o(n)最长公共子串(二维打表)描述:设置二维表记录原字符串与反转字符串对比情况,在比较过程中动态的记录回文子串的长度。时间复杂度:o(n2)空间复杂度:o(n2)(可通过一...原创 2019-11-23 19:51:06 · 127 阅读 · 0 评论 -
LeetCode14 最大公共前缀
问题描述:编写一个函数找出字符串数组中的最大公共前缀,若不存在,返回空字符串。例[“flower”, “flow”, “flight”]返回"fl"。思路:(假设S为字符数组字符个数,m…为字符串长度,n为字符串个数)遍历对比法从头开始两个对比得出公共前缀,在后续遍历过程中不断将前缀与每个字符做比较,存在该后缀直接后移比较,否则删减前缀继续比较,直至得出空字符串或最小公共前缀。时间...原创 2019-12-18 10:27:00 · 228 阅读 · 0 评论 -
LeetCode13 罗马数字转整数
问题描述:将罗马数字转换成整数思路:方法一设置目标整数tar初始为0。遍历字符串,如果当前罗马字符比下一字符大,tar加上该罗马数字对应整数,反之减去该值。方法二:将所有罗马数字对应整数情况进行映射,在遍历字符串的过程中判断是否出现双字符对应情况,出现则加双字符对应值,否则加单字符对应值。//java//方法一class Solution { publi...原创 2019-12-16 19:45:40 · 91 阅读 · 0 评论 -
LeetCode12 整数转罗马数字
问题描述:罗马字符与数字对应如下字符:数值I :1IV:4V:5IX:9X:10XL:40L:50XC:90C:100CD:400D: 500CM:900M:1000给定一个1-3999范围内的数字,转换成罗马数字。例如:3对应III,9对应IX,1994对应MCMXCIV思路:贪心算法,从最大的罗马数字开始向前找到每个单位对应的个数,直至找到满足该数的单位...原创 2019-12-15 10:56:33 · 85 阅读 · 0 评论 -
LeetCode10 正则表达式匹配
问题:给定匹配串s和模式串p(只包含.和*模式),确定s是否与p匹配.例:(. 表示任一字符匹配,* 表示p前一字符0次以上匹配)s = “aaa”, p = “a*”,匹配;s = “ad”, p = “aab",匹配,;s = “absw”, p = ".”,匹配;s = “aabb”, p = “a*b”,不匹配;思路:递归法首先考虑字符串为空情况:当p为空时,那...原创 2019-12-10 17:41:28 · 89 阅读 · 0 评论 -
LeetCode09 回文数
问题描述:判断一个整数是否为回文数,例:121是回文数,-121不是。思路:求出整数的逆置数,判断是否相等时间复杂度:o(log10n)空间复杂度:o(1)转化成字符串匹配问题时间复杂度:o(log10n)空间复杂度:o(1)//java//逆置数法class Solution { public boolean isPalindrome(int x)...原创 2019-12-07 10:56:24 · 126 阅读 · 0 评论 -
LeetCode08 字符串转整数
问题描述:将一个字符串转换为整数,转换时会丢弃开头无用空白字符,若首字符为+,-,或数字,转换为相应的正负数,否则返回0,数字后面如果存在其他非数字字符,则舍弃。例:" 142a"输出为142" -10 k"输出为-10"ws120"输出为0注意:假设可转换整型大小为32位,如果转换数据超出范围,返回最大最小值[-231, 231-1]。思路:考察到所有情况即可先将字符...原创 2019-12-06 15:11:12 · 83 阅读 · 0 评论 -
LeetCode07 整数反转
问题描述:给定一个32位带符号整数,将整数反转。例如321反转得到123;120反转得到21;-105反转得到-501.思路:简单题,直接利用求余叠乘即可,不过需要关注是否溢出。class Solution { public int reverse(int x) { int tx = 0; //目标值 while(x != 0){ ...原创 2019-11-30 19:03:48 · 87 阅读 · 0 评论 -
LeetCode06:Z字形变换
问题描述:输入一个字符串和给定数字nums,将字符串用长为nums的Z字形型展开,输出转换后的字符序列。例:“PAHPZAISH”, 3P____P____SA _H_Z__I__HH____A输出:PPSAHZIHHA思路:Z字入桶把构建的Z字形按行看,每行对应一个桶,只要以Z字形将字符串按序投入桶内即可。时间复杂度:o(n)空间复杂度:o(n)按行输出...原创 2019-11-29 15:40:15 · 140 阅读 · 0 评论 -
Leetcode03无重复字符最长子串
问题描述:给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。思路:动态指针(滑动窗口):设置首尾指针,初始指向首字符,同时设置最长子串长度max。尾指针后移,若所指新字符不为重复字符,继续后移;否则停止后移,但首指针后移,直至子串中没有重复指针。重复上述步骤直至遍历结束。//cpp动态指针class Solution {public: int lengthO...原创 2019-10-13 19:27:06 · 159 阅读 · 0 评论 -
Leetcode02 两数相加
问题描述:给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。实例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807/** * Definition for singly-linked ...原创 2019-10-11 17:15:47 · 238 阅读 · 0 评论