![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
刷题
z1k
励志成为作家的程序员
展开
-
【剑指offer刷题笔记】
52、两个链表的第一个公共结点/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/import java.util.HashMap;public class Solution { public ListNode FindFirstCommonNode(ListNode pHead1, ListN原创 2022-02-21 20:45:37 · 700 阅读 · 0 评论 -
【leetcode刷题笔记】十八、一维数组的动态和
解题思路如果不新建一个数组,要一边加和一边同步更新感觉不太好操作,所以新建一个同样大小的数组,然后就是双重循环了,一层循环用来更新新数组的每一个数字,另一层循环用于求和代码class Solution { public int[] runningSum(int[] nums) { int[] nums1=new int[nums.length]; for(int i=0;i<nums.length;i++){ for(int j=0原创 2021-08-28 15:56:16 · 669 阅读 · 0 评论 -
【leetcode刷题笔记】十七、合并两个有序数组
解题思路读懂题的第一反应就是将两个数组合并起来进行排序,实际上也是这么做的,本来在循环的因子上还有所误解,还打算单独将m=0与n=0的情况拿出来单独讨论,然后发现没什么必要,另外也不需要return这个数组,因为是在nums1上进行更改的。代码class Solution { public void merge(int[] nums1, int m, int[] nums2, int n) { for(int i=m, j=0;i<m+n;i++,j++){原创 2021-08-24 23:20:06 · 74 阅读 · 0 评论 -
【leetcode刷题笔记】十六、斐波那契数
解题思路这题就是对昨天题目的复习,类似这种递归思想的题都可以这么做。代码class Solution { public int fib(int n) { if(n==0){ return 0; } if(n==1){ return 1; } int a=0; int b=1; for(int i=2;i<=n;i++){原创 2021-08-22 18:48:52 · 55 阅读 · 0 评论 -
【leetcode刷题笔记】十五、爬楼梯
解题思路转载自leetcode上大佬对于动态规划的讲解我们来分析一下,动规五部曲:定义一个一维数组来记录不同楼层的状态确定dp数组以及下标的含义dp[i]: 爬到第i层楼梯,有dp[i]种方法确定递推公式如果可以推出dp[i]呢?从dp[i]的定义可以看出,dp[i] 可以有两个方向推出来。首先是dp[i - 1],上i-1层楼梯,有dp[i - 1]种方法,那么再一步跳一个台阶不就是dp[i]了么。还有就是dp[i - 2],上i-2层楼梯,有dp[i - 2]种方法,那么再一步跳原创 2021-08-21 22:49:15 · 126 阅读 · 0 评论 -
【leetcode刷题笔记】十四、买卖股票的最佳时机
解题思路最开始自己的方法是暴利穷举的思路,但是超出了时间限制,看了看给的数据,是非超大规模的测试数据了,所以这题就卡住了,然后看了眼优秀的解题方法,发现其实是一个循环就能搞定的问题,不断地获取最小值并用最大值减最小值,过程简单粗暴,但是需要细细品味,明天借助这个思路解决一下最小子序列问题。代码class Solution { public int maxProfit(int[] prices) { // int max=0; // for(int i=0;i&l原创 2021-08-19 23:41:38 · 60 阅读 · 0 评论 -
【leetcode刷题笔记】十三、存在重复元素
解题思路判断是否存在重复元素,对数组里的元素先进行排序,排序完成之后,再比较相邻元素是否相同,如果有相同即有重复,返回true,如果没有相同,即没有重复,返回false。代码class Solution { public boolean containsDuplicate(int[] nums) { Arrays.sort(nums); int n = nums.length; for (int i = 0; i < n - 1; i++)原创 2021-08-18 23:22:28 · 70 阅读 · 0 评论 -
【leetcode刷题笔记】十二、学生出勤记录I
解题思路先转换为数组,然后定义两个变量一个用来存储总的a的数量,最后判断a是否少于两天,一个用来判断是否三天连续L,这里进入循环先判断是否L已经大于等于3,如果不的话,再判断当前为A或者L,A的话要注意计数,同时不是连续的L了要把lsympol归零,如果是L的话注意计数即可。代码class Solution { public boolean checkRecord(String s) { char[] ss=s.toCharArray(); int acount原创 2021-08-17 00:51:54 · 91 阅读 · 0 评论 -
【leetcode刷题笔记】十一、验证回文串
解题思路:对于这类型字符串可以转化成数组进行处理,tocharArray很关键。然后是对数据的清洗,将大写字母都转化为小写,这里利用的是ascii码的计算,减去A加上a就是把大写变成小写的过程。然后是判断的过程,这里的小技巧应该记住这种双向奔赴的操作判断条件可以是i<j这种,挺巧妙的。另外实现的过程也比较容易理解,首先判断第一个字母是不是字母或者数字,然后判断最后一个字符是不是字母或者数字,如果不满足第一个判断,那么让i++,如果不满足第二个判断,让j++如果都满足了,那就比较是否相等,不原创 2021-08-14 22:22:09 · 62 阅读 · 0 评论 -
【leetcode刷题笔记】十、最后一个单词的长度
今天刷的是字符串的简单题大意为输入一个字符串,字符串由一个一个的单词组成,单词之间有空格,获得最后一个单词的长度,这种一眼就看出来思路的题真的是做一道少一道了哈哈哈。解题思路:输入:s = " fly me to the moon "输出:4通过上面的样例不难看出获得最后一个单词的长度只需要从后面往前面遍历每个字符,首先要确定不是空格再开始计数,计数开始之后遇到空格再停止计数就ok了。代码(Java):class Solution { public int l原创 2021-08-13 20:35:04 · 68 阅读 · 0 评论 -
【leetcode刷题笔记】九、加一
鉴于这个题目过于抽象,决定大体把题目介绍一下,大意就是将一个数字的每一位存到数组里,然后在这个基础上完成整个数字加一的操作。经过我做这道题的体验,刚开始会选择比较暴力的方法,用好多ifelse来完成这道题,这样的坏处是会遗漏一些考虑,比如我刚开始就没考虑到99变成100这种数组空间不够的情况。鉴于java不能动态增加数组空间,必须选择开辟一个新的数组,这点可以说这题最重要的地方了。解题思路:先不考虑要进位的特殊情况,通常不需要进位了就代表当前数组的值为最终结果了,这一点可以间接反映如果当前位不为9,原创 2021-08-12 21:22:49 · 64 阅读 · 0 评论 -
【leetcode刷题笔记】八、移除元素
本题借鉴的是上一道题双指针的方法,我觉得两道题如果能结合起来看一定会有更好的理解。解题思路首先把长度为1的情况单独考虑,其他情况的处理办法,即让两个指针都指向第一个元素,然后慢指针同步更改数组数字,同时表示最终数组长度,快指针来判断对应的数字是否等于给定的值。代码class Solution { public int removeElement(int[] nums, int val) { if(nums.length==1){ if(nums[0]=原创 2021-08-11 21:03:35 · 51 阅读 · 0 评论 -
【leetcode刷题笔记】七、删除有序数组中的重复项
今天的题仍然是考察数组操作的简单题目,在这个题里用到了快慢指针的这样一个思想,通过双指针实现对原数组的修改以及对数组长度的确定。另外可以感觉到自己在做题的过程中不再像最开始那样怕难,怕麻烦了,并且在有多种情况的需要考虑的时候也可以想到,这算是一些进步吧。解题思路:思路是这样的,首先让慢指针指向第一个元素,快指针指向第二个,当然这里是把只有一个元素与两个元素的情况讨论出来了,在考虑其他情况,当第一个和第二个元素相等的时候,那就让快指针来确定有几个连续的相同的数字,相同就让快指针向后走一位,直到不相同了原创 2021-08-10 23:49:34 · 80 阅读 · 0 评论 -
【leetcode刷题笔记】六、搜索插入位置
昨天周末给自己放了个假,虽说没有提前声明好但也是合情合理(绝对不能承认是拖到太晚了实在是做不出来题然后就蒙混过去了),今天依旧是做数组的简单题。解题思路:这个题采用的就是极其暴力的解法,把能想到的情况都写到流程中就完事了。首先是在排序数组中找到目标值,排序数组很关键,并且没有重复的元素,这就意味着如果找不到相同的元素,只需要确定目标值大于前一个元素小于当前元素就能确定位置,确定了这个大思路,就需要考虑一些特殊情况,首先是只有一个元素的情况,对应着两个结果,这个比较好想,然后是多个元素的时候在进行前后原创 2021-08-09 16:57:43 · 62 阅读 · 0 评论 -
【leetcode刷题笔记】五、有效的括号
今天因为外出到家太晚,预测直接做题恐怕是无法在当天完成提交了,所以就直接看了别人的方法,可以说非常巧妙了,也学到了java的replace方法的使用,非常有用。解题思路:首先对题目进行分析,成对的括号包含有哪些特征,首先长度肯定不能为奇数,这样的话肯定不成对;然后可以多写一些例子进行考虑,最内层一定是相邻的括号,可以想到有没有办法,让最内层的拿出来,然后一层一层的去掉,如果最后全去掉了,那不就是一个正常匹配的括号序列了。代码(Java):public boolean isValid(Str原创 2021-08-07 23:33:42 · 53 阅读 · 0 评论 -
【leetcode刷题笔记】四、最长公共前缀
原来要感受时间流逝的最好方式就是每天坚持做点什么,今天做的是这个字符串公共前缀的问题,今天这个题用暴力的方法想了半天没做出来,感觉对java字符串处理的一些方法也不够了解,需要熟悉一些新的思路新的方法,通过看别人的题解才知道这题该如何做。解题思路:首先是一个很关键的方法,startswith,这方法可以判断两个字符串前缀是否相同,比如第二个字符串是否包含第一个字符串,明确了这个方法,只需要单拎出来一个字符串,作为被比较的,然后其他字符串用startswith循环跟他比,如果不同,那就缩短一下被比较的原创 2021-08-06 20:51:08 · 52 阅读 · 0 评论 -
【leetcode刷题笔记】三、回文数
回文数这个问题在之前蓝桥杯的时候就做过,不过已经不记得当时的思路和现在是否相同了,虽然是简单题,但是一次就ac的快乐还是很爽的。解题思路:在进行算法的数字游戏的时候,将数字进行拆分感觉应该是一些基本的需要掌握的思想,我这里的核心思想就是将数字拆分放到数组里,然后将第一个数与最后一个数进行比较,并且往前面递进比较,比如第二个数和倒数第二个数这样。遇到不同的那肯定就是false,遇到相同的就继续比较,直到比完,一直没有不同的就是true了。另外需要注意的是负数按照题目设计的规则一定是false,这里是在原创 2021-08-05 16:48:40 · 42 阅读 · 0 评论 -
【leetcode刷题笔记】二、整数反转
虽然写下这些思路,但是实际上题还没有完全解决,还有个数不能正确的通过,考虑到晚上出去吃饭不一定能够及时更新,所以趁现在及时写一下今日刷题笔记。解题思路:题目的大意就是将123这种整数反转变成321,题目规定的整数范围为[−2的31次方, 2的31次方 − 1],也就是int型的数的范围,首先要知道这一点,然后整数反转大致有两个思路,一个思路是使用求余,与除法来分开每一个数,再将每一个单独的数用乘以10的方法拼接起来,其实这里代码都是没有什么拐弯的,通过阅读代码可以了解到对应的思路,另一个思路是当..原创 2021-08-04 16:56:01 · 79 阅读 · 0 评论 -
【leetcode刷题笔记】一、两数之和
能看到这文章的估计应该都知道这题是啥,把原题复制过来除了增加点篇幅应该没什么用,所以我就直入主题,说我自己的思路跟解题代码了。解题思路:原创 2021-08-03 23:18:16 · 87 阅读 · 0 评论