leetcode算法题
文章平均质量分 54
leetcode算法题
XiaXinyuuu
唯一不变的就是变化
展开
-
22.括号生成
作者 : XiaXinyu日期 :2021-10-21原创 2021-10-24 19:45:08 · 80 阅读 · 1 评论 -
20.合并两个有序链表
作者 : XiaXinyu日期 :2021-10-21题目[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-htkRVEOj-1634821299167)(https://z3.ax1x.com/2021/10/21/5ykomF.png)]题解1(朴素做法)和两数相加的思路差不多class Solution { public ListNode mergeTwoLists(ListNode l1, ListNode l2) { ListNo.原创 2021-10-21 21:02:10 · 184 阅读 · 0 评论 -
19.删除链表的倒数第N个结点
作者 : XiaXinyu日期 :2021-10-18题目题解1(朴素做法——不使用虚拟结点)可知要删除的结点所在位置为index = len - n + 1,其中len为链表长度只需先求出链表长度然后确定要删除结点的位置后进行删除操作即可代码class Solution { public ListNode removeNthFromEnd(ListNode head,int n){ int len = getLen(head); int inde.原创 2021-10-18 19:52:04 · 108 阅读 · 0 评论 -
17.电话号码的字母组合
作者 : XiaXinyu日期 :2021-10-09题目理解2到9中每个数字都代表不同的字母组合,返回由每个输入数字的单个字母其他数字的单个字母组成的字母组合题解1(朴素做法)代码class Solution { public List<String> letterCombinations(String digits) { if(digits.length() == 0) return new ArrayList<Stri.原创 2021-10-09 12:57:08 · 79 阅读 · 0 评论 -
16.最接近的三数之和
作者 : XiaXinyu日期 :2021-10-08题目理解这道题和15题很像,关键在于求与目标最接近的三个整数和题解1(朴素做法)这道题使用三层for循环是可以通过的,说明测试数据还是不够强大class Solution{ public int threeSumClosest(int[] nums,int target){ int loss = Integer.MAX_VALUE; int ans = 0; int len =.原创 2021-10-08 09:49:46 · 60 阅读 · 0 评论 -
15.三数之和
作者 : XiaXinyu日期 :2021-10-07题目理解在给定数组中找出所有相加为0的三元组题解1(朴素做法)首先对数组进行排序,然后使用三层for循环来枚举出所有三元组并判断是否等于0即可虽然这种做法的时间复杂度很高,显然是不能通过测试样例的,但是实现代码中还是有很多细节是值得注意的代码class Solution{ public List<List<Integer>> threeSum(int[] nums){ List<.原创 2021-10-07 21:35:49 · 71 阅读 · 0 评论 -
14.最长公共前缀
作者 : ThinyuXia日期 :2021-10-06题目题解1(横向扫描法)令LCP(S1,S2)为字符串S1和S2的最长公共前缀则可以得出n子字符串的最长前缀:LCP(S1…Sn)=LCP(LCP(LCP(S1,S2),S3),…Sn)从左向右比较两个相邻的字符串,不断更新最长公共前缀长度即可????代码class Solution { public String longestCommonPrefix(String[] strs) { if (strs原创 2021-10-06 19:55:34 · 163 阅读 · 0 评论 -
13.罗马数字转整数
作者 : ThinyuXia日期 :2021-10-03题目理解其实就是昨天那道题目的逆过程,既然是简单的题目,一定会有优雅的解决方案题解1(找规律)1,5,10,50,100,500,1000这7个数字可以直接由单个罗马字符进行转换,关键在于剩余的6个由复合罗马字符代表的数字规律就是只要当前字符代表的数字小于相邻右边的字符代表的数字,那么这个字符所代表的值就是负值!!!代码class Solution { public int romanToInt(String s) {.原创 2021-10-03 16:44:10 · 79 阅读 · 0 评论 -
12.整数转罗马数字
作者 : XiaXinyu日期 :2021-10-02题目理解题意给定一个整数,按照罗马数字的表示方法将其转换为罗马数字,进行模拟即可题解1罗马数字中一共包含13个字符,其中包括6个复合字符为了表示整数n,可以不断寻找不超过n的最大整数值,并将该整数值转换为罗马字符,然后再不断减去该整数值,直到n等于0,这时即完成转换class Solution { int[] values = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, .原创 2021-10-02 14:20:20 · 104 阅读 · 0 评论 -
11.盛水最多的容器
作者 : XiaXinyu日期 :2021-10-01题目[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CbhY4xrk-1633062394515)(https://z3.ax1x.com/2021/10/01/4T7Jun.md.png)]理解这道题的关键点在于要理解木桶效应,即一个木桶能装多少水取决于最短的木板长度题解一(双指针)经过思考可以得出两个解题的关键点1.相同情况下,左右边界的距离越远越好2.面积受限于左右边界中较短边界下面对关键点.原创 2021-10-01 12:27:00 · 179 阅读 · 2 评论 -
10.正则表达式匹配
作者 : XiaXinyu日期 :2021-09-25题目理解实现.和*两种正则表达式匹配操作 ????栗子题解一采用动态规划的方式做这道题目,理解状态转移方程即如何填表格即可思路来自这里练习动态规划的宝藏网站在这里代码class Solution { public boolean isMatch(String s, String p) { boolean table[][] = new boolean[s.length() + 1][p.length原创 2021-10-04 12:33:45 · 61 阅读 · 0 评论 -
9.回文数
作者 : XiaXinyu日期 :2021-09-29题目理解判断一个数字反转后是否和反转前相等,例如12321反转后仍然是12321,所以12321是一个回文数题解1(反转法)将数字反转后比较是否和原数字相等,数字反转的思路与第七题是一致的代码class Solution { public boolean isPalindrome(int x) { if(x < 0) return false; //因为负数前面带有符号,所以不可能是回文数 .原创 2021-09-29 19:30:33 · 128 阅读 · 0 评论 -
8.字符串转换整数
作者 : XiaXinyu日期 :2021-09-29题目[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dHxOwUKp-1632914895450)(https://z3.ax1x.com/2021/09/29/44oZ59.md.png)]理解将字符串中满足题中条件的数字转换成整数输出这道题的题目比较长,一定要完整的读清楚每个条件,然后理清逻辑总体来讲这道模拟题的难度不算大,但是考察是否足够的细心题解1列出所有的约束条件,理清逻辑,然后代码实现即可.原创 2021-09-29 19:29:33 · 100 阅读 · 0 评论 -
7.整数反转
题目理解 将一个整数反转过来即可,若反转过来的数不在int范围内,则返回0题解1将整数x的每一位取出再进行累乘操作即可得到反转后的整数x注意需要将ans 定义 成long型,否则在累乘过程中,ans 可能会超出int范围,出现溢出后的数值class Solution { public int reverse(int x) { long ans = 0; while(x != 0){ ans = ans * 10 + x % 10; //原创 2021-09-27 13:41:59 · 102 阅读 · 0 评论 -
6.Z字形变换
作者 : XiaXinyu日期 :2021-09-26题目理解将给定的字符串按指定行数进行Z字形(是竖过来的z字形)排列,然后将排列后字符串按行从左到右进行输出题解1(模拟)通过遍历字符串s,将字符串的每个字符写入相应行中,因为字符串长度和给定行数均已知,我们可以根据这两个变量得出排列后的z字形字符串行数len = min(s.length(), numRows)然后我们模拟z字形字符串的形成过程,初始化rows列表数组存储每行字符串(rows的长度为len),goingDown记录方向.原创 2021-09-29 19:27:34 · 105 阅读 · 0 评论 -
5.最长回文子串
作者 : XiaXinyu日期 :2021-09-25题目理解在给定字符串种找到满足是回文字符串到最长子串题解1(朴素做法)最直观的思路就是枚举出所有子串,并对每个字串进行判断,如果是回文字符串且比当前ans值大,就更新ans代码class Solution{ public String longestPalindrome(String s) { int n = s.length(); String ans = ""; for(int i = 0;i &.原创 2021-09-25 21:20:16 · 67 阅读 · 0 评论 -
4.寻找两个正序数组的中位数
作者 : XiaXinyu日期 :2021-09-21题目理解给定两个升序的数组,找出由这两个数组合并后的升序数组中的中位数题解1(朴素做法——双指针合并数组)这道题首先我想到的最直观的做法就是利用双指针将两个数组合并成一个有序数组合并之后在新数组中找出中位数即可这种做法应该是最容易理解的伪代码初始化新数组,长度为给定两个数组的长度之和初始化指向两个数组的指针i,j以及新数组指针cnt当 i 小于 nums1的长度时或 j 小于nums2的长度时执行循环当 i .原创 2021-09-25 21:21:05 · 143 阅读 · 0 评论 -
3.无重复字符的最长子串
作者 : XiaXinyu日期 :2021-09-23题目理解在一个给定字符串中找出不重复的最长字串的长度题解1(朴素做法——使用HashSet)我首先想到使用朴素做法来解决这道题目,即枚举出所有字符串组合,判断每个字符串中是否符合无重复字符的条件,“3.无重复字符的最长子串.md” 200L, 4866C...原创 2021-09-23 20:20:54 · 69 阅读 · 0 评论 -
2.两数相加
作者 : XiaXinyu日期 :2021-09-22题目:理解:模拟加法的操作(利用链表可以实现大整数加法,操作数不受基本数据类型的限制)题解1:因为给定的两个链表是以逆序的方式存储的,即链表头部存储个位数字,链表尾部存储最高位数字,所以我们只需要模拟一下加法操作即可,但是在相加的过程中要注意是否产生进位。栗子]这是两个链表长度一致的情况,当两个链表长度不一致时,可以将短的链表对应缺失部分视为0。伪代码初始化头结点head,伪结点tail初始化变量carry .原创 2021-09-22 16:12:38 · 66 阅读 · 0 评论 -
1.两数之和
作者 : XiaXinyu日期 :2021-09-21题目:理解:在给定的数组中找出两个相加后等与目标值的元素并返回下标题解1:朴素做法直接采用两层for循环来遍历数组,得出在数组中任意两个元素的所有组合情况,等于目标值就返回其下标即可代码class Solution { public int[] twoSum(int[] nums, int target) { for(int i = 0;i < nums.length;i ++) .原创 2021-09-21 17:23:09 · 97 阅读 · 0 评论 -
2.两数相加(leetcode-2)
1.题目描述(中等难度)2.解法1(模拟整数加法)图示:思路:由于两个链表存储数字的方式是相同的。我们只需在遍历两个链表的同时将链表对应位置结点存储的数值直接相加即可。在相加的过程中有可能产生进位,需要设置一个变量carry处理进位的情况。代码:class Solution {public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { ListNode * head = nullptr; List原创 2021-05-24 18:14:49 · 113 阅读 · 0 评论 -
1.两数之和(leetcode-1)
1.题目描述(简单难度)给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。示例 2:输入:nums = [3,2,4原创 2021-05-23 14:01:39 · 125 阅读 · 0 评论