![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
代码打卡
HiLittleBoat
“看似不起波澜的日复一日,一定会在某一天,让你看到坚持的意义。”
展开
-
LeetCode第15题,三数之和,Java,双指针,排序
问题:思路:因为需要不重复,所以,想到了先排序,然后,固定一个数 i ,剩下了两个数,就可以用两数之和的办法来考虑了,但是要注意,指针变化的时候,要找到下一个不一样的数的指针。代码:class Solution { public List<List<Integer>> threeSum(int[] nums) { List<List<Integer>> li = new ArrayList<List<原创 2021-07-30 21:34:37 · 127 阅读 · 0 评论 -
LeetCode第82题,删除排序链表中的重复元素Ⅱ,Java,双指针
问题:思路:引入一个头节点,让其next指向head 1 2 3 3 4 4 5 1,2 1 2 1 2 1 2(删) 1 2原创 2021-07-30 12:21:51 · 136 阅读 · 0 评论 -
LeetCode第162题,寻找峰值,Java,二分查找
问题:思路: 感谢前段时间的二分查找的练习,虽然这个不是排好序的,但是用二分法来解决还是很容易的。 主要分析mid,,如果mid位置上的值 大于两侧的,则满足条件 mid 与两侧的值还有另外其他的情况,举个栗子,mid-1 mid mid+1 位置上的值分别为(1) 左 < 中 > 右 (mid即为所求)(2)左 < 中 <右 (需要在mid - right 边查找)(3)左 >...原创 2021-07-29 14:20:40 · 217 阅读 · 0 评论 -
LeetCode第153题,寻找旋转排序数组中的最小值,Java,二分查找
问题:思路:跟昨天练的一个题很类似,这个就是用二分查找法,寻找左大于右的情况,代码:class Solution { public int findMin(int[] nums) { int left = 0; int right = nums.length-1; if(nums[left]<=nums[right]){ return nums[left]; } ..原创 2021-07-29 12:36:35 · 74 阅读 · 0 评论 -
LeetCode第74题,搜索二维矩阵,Java,二分查找
问题:思路:第一种思路是,把所有的拼起来就是一个数组嘛,然后用二分法就????了第二种思路是,先看第一列的,用二分查找,找到合适的行,然后再用二分查找,对应的一行第二种的思路还是,把自己的东西分区域,然后分别分析每个部分的情况,就是容易漏掉某些状态代码:class Solution { public boolean searchMatrix(int[][] matrix, int target) { int m = matrix.length;原创 2021-07-29 11:33:34 · 154 阅读 · 0 评论 -
LeetCode第33题,搜索旋转排序数组,Java,二分查找
问题:思路: 用二分查找,虽然是旋转数组,但是照样可以用,只不过我的写法可能比较麻烦,分的讨论情况比较多。例如 产生的left、mid、right的关系只可能有两种1、mid>=left>right2、mid<=right<left而针对每一种情况,target又只可能存在3个数产生的4个空隙中,例如对于第一种情况(0)target 首先如果等于 这三个数的任意一个,则可以返回(1)target 如果在left 和 right之...原创 2021-07-28 22:15:35 · 141 阅读 · 0 评论 -
LeetCode第34题,在排序数组中查找的第一个和最后一个元素,Java,二分查找
问题:思路:这里的二分查找,不同于之前的那个,这里边元素可以重复第一步:先用二分法找到target;第二步:从mid分成两部分,分别找第一个元素和最后一个 第一步,就不用多说,详情可以参考我之前的一篇笔记LeetCode第704题,二分查找,Java实现_代码小船的博客-CSDN博客 第一步是 step1和step2;然后以mid为分界线,将数组划分为两部分,left-mid 和 mid-right; 这里只讨论...原创 2021-07-28 15:53:47 · 151 阅读 · 0 评论 -
LeetCode第567题,字符串的排列,Java,滑动窗口
问题:思路: 用HashMap的方法 构想了好久,虽然解决了,但是性能不很好 我一开始的思路就是,因为只有窗口中的字母的个数与s1相同,才有希望,所以就从一开始就再s2中看s1.length()个字符,先用HashMap记录s1各个字母出现的个数,如果窗口中的情况与s1的相同,那就返回true。 然后一个个进出,进出中查看两边指针的字母,然后对HashMap进行更改。 但是HashMap 很显然更改其中字符很麻烦,并且,每个窗口,都要检查一次就很...原创 2021-07-26 16:20:01 · 199 阅读 · 0 评论 -
LeetCode第3题,无重复字符的最长字串,Java,滑动窗口
终于搞明白Java双指针了,前段时间有事情,所以有几天没进行算法的打卡,今天终于回归正常啦,继续进入滑动窗口的学习。问题:知识点:1、滑动窗口: 滑动窗口,就是通过一个非固定的窗口移动,找到答案,例如本题示例1中,abcabcbb,在窗口中的先是abc,然后a进入窗口,变为abca,但是不满足条件,然后滑动窗口。2、HashMap 用HashMap,记录窗口中的情况3、String、char类型的相关操作代码:...原创 2021-07-26 11:31:45 · 134 阅读 · 0 评论 -
LeetCode第19题,删除链表的倒数第 N 个结点,Java
问题:思路只用一次扫描,考虑双指针如果删除的不是头节点,例如删除长度为5的链表的倒数第3个节点,思路构造图如下:step1:两个指针,都指向头节点 step2:让右指针远离左指针 n 个节点 step3:左右指针依次向右移动1个节点 如果右指针的下一个为空,则删除做指针的下一个//如表格所示,1代表左边的...原创 2021-07-23 15:41:29 · 245 阅读 · 1 评论 -
LeetCode第876题,链表的中间结点,Java
问题:方法1最开始想到的,就是先遍历一遍,然后记录总数,然后再次遍历,找到中间的节点代码:/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, Li原创 2021-07-23 15:00:47 · 125 阅读 · 0 评论 -
LeetCode第557题,反转字符串Ⅲ,Java
public String reverseWords(String s) { String[] str = s.split(" "); String reStr = ""; for(int i = 0;i<=str.length-1;i++){ if(i == str.length-1){ reStr += reverse4(str[i]); }else{ .原创 2021-07-16 10:11:50 · 210 阅读 · 0 评论 -
LeetCode第344题,反转字符串,Java
今天是简单的双指针问题,还没前几天的复杂呢。问题:代码: public void reverseString(char[] s) { int i = 0; int j = s.length-1; while(i<j){ char temp = s[i]; s[i] = s[j]; s[j] = temp; i++;原创 2021-07-16 08:48:42 · 58 阅读 · 0 评论 -
LeetCode第167题,两数之和Ⅱ,Java
问题:方法一:最常规的,就是俩for循环,挨个遍历,大于了 就下一轮,通过了但是 费时费空间,有待优化代码:原创 2021-07-15 13:00:04 · 106 阅读 · 0 评论 -
LeetCode第283题,移动零,Java
问题:思路:这个题比较简单。引入一个标记非0数的下表index,表示目前存到的位置遇到非零,将数据填入前边的位置index 0 1 0 3 1 2 0 continue 1 1 nums[index]=1 continue 2 3 nums[index.原创 2021-07-15 11:16:45 · 83 阅读 · 0 评论 -
LeetCode第189题,旋转数组,Java
问题:思路:方法1:最简单的,声明一个新列表,然后遍历记录方法2:引入一个标记数,用来更改标记的数值,然后一个个找已经存入新的地点的值循环k步,即可得到结果 1 2 3 4 5 6 flag 5 6 4 3 2原创 2021-07-14 19:11:55 · 145 阅读 · 0 评论 -
LeetCode第977题,有序数组的平方,java,[算法学习计划—双指针]
问题:思路:知识点:双指针想法:从数据两端往中间计算,直到汇合,总体不难,就不多说了。 -7 -3 2 3 11 left right 代码实现:class Solution { public int[] sortedSquares(int[] nums) { int[] squares = new int[nums.length]; /.原创 2021-07-14 11:44:45 · 51 阅读 · 0 评论 -
LeetCode第35题,搜索插入位置,Java
问题:思路: 同理,排好序的数组,还是二分法 二分法,造表格,清晰明了 造表格的详细解释,我的前两篇文章写的比较清楚,这里就只展示造出来的效果啦。 例子1: nums = [1,3,5,6,7] target=8 1 3 5 6 7 null step1 min mid max step2 min,mid...原创 2021-07-13 11:52:36 · 107 阅读 · 0 评论 -
LeetCode第278题,第一个错误的版本,Java
目录问题思路代码实现效果问题思路:因为是排好序的数组,所以第一反应就是运用二分查找 仍画一个表格进行分析,其中last 表示的是 最后一次看到的好版本 例子1: n = 7, bad = 3 因为在发现mid是坏的,跟last还差的很远的时候,我加入了一段代码,让last向后看,看看接着的一个是不是还是对的,如果是,那last进1,min进2进行判断,如下表: 如果我的思路比较跳脱的话...原创 2021-07-13 11:06:49 · 181 阅读 · 0 评论 -
LeetCode第704题,二分查找,Java实现
目录二分查找法的基本思想查找过程时间复杂度优缺点代码实现二分查找法的基本思想查找过程一个排好序的数组(本文假设升序),查找有没有某个数target,如果有,返回其下标,如果没有,返回-1二分查找法就是折半地去寻找,通过比对这一半的最中间的值,是否与target相等,如果不等,在折一半例如 nums=[-1,3,5,6,7,9], 目标target=7val -1 3 5 6 7 9 step1 min=0 .原创 2021-07-13 10:07:30 · 242 阅读 · 0 评论 -
LeetCode,第275题H指数Ⅱ,Java
问题:易错点:感觉这个题,并不是很难,而是 一开始真的很难get题意,尝试了几次错误之后才明白过来。。这个h,并不是说某一篇论文的引用次数是这个数字才算满足条件 例如:citations=[100] 的时候,并不是没有满足条件的数字,,,这个情况下答案是1,因为至少有1篇论文至少被引用了1次(1<100),满足题意。思路:为了方便理解,我做了一个表格:针对例子:citations=[0,1,2,5,6]如图,第一行的1-5,记为h,分别他...原创 2021-07-12 16:37:11 · 114 阅读 · 0 评论 -
力扣—2.两数相加—java
问题:思路:数据结构Java已经忘完了,对链表不是很熟悉,刚开始没有注意到ListNode是节点,,只存储 一位数字 的节点,然后吃了不少亏,后来迷过来之后就好多了,我写了详细的注释,希望能够有所帮助。如果存在问题,欢迎沟通~代码:/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode().原创 2021-07-12 15:08:11 · 192 阅读 · 0 评论