![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leecode
文章平均质量分 61
qiaoqingshan
这个作者很懒,什么都没留下…
展开
-
leetcode刷题之某数之和集锦
1.两数之和public int[] calsum1(int[] nums,int tar) { HashMap<Integer,Integer>map1=new HashMap<>(); for(int i=0;i<nums.length;i++) { if(map1.containsKey(tar-nums[i])) { int[] ans=new int[] {map1.get(tar-nums[i]),i}; return ans; }原创 2021-05-11 15:07:12 · 90 阅读 · 0 评论 -
leetcode刷题之链表之环
public ListNode detectCycle(ListNode head) { ListNode slow=head; ListNode fast=head;//开始时快慢指针都指向头节点 while(true) { if(fast==null||fast.next==null)//一开始错是因为少了这个判断,这个判断是检查这个链表是否没有环。如果没有环,那么fast会走到null节点,否则会困在环里面永世历劫 return null;.原创 2021-05-08 10:17:00 · 51 阅读 · 0 评论 -
leetcode刷题之链表之移除元素
203.移除链表元素解法1:虚拟节点法 ListNode virtualnode=new ListNode(val-1); virtualnode.next=head;//设置虚拟节点,为本题关键,为了处理如果头节点需要删除的情况 ListNode tmp=virtualnode; while(tmp.next!=null) { if(tmp.next.val==val) {//一旦下一个节点val相等原创 2021-05-08 10:16:48 · 94 阅读 · 0 评论 -
leetcode刷题之回文链表
第一种思路:利用栈public boolean ispalindrome(ListNode head) { Stack<ListNode> stack=new Stack<>(); ListNode tmp=head; while(head!=null) {. //⚠️,不能写成head.next!=null stack.push(head); head=head.next; } while(tmp!=null) {. //同.原创 2021-05-08 10:16:34 · 141 阅读 · 0 评论 -
leetcode刷题之链表之双指针
下面两道题本质上都是链表求交点问题,有环的链表就用快慢指针(龟兔赛跑思想)来解决,无环的链表则思考如何达成长度相同的路径的目标。141.环形链表public boolean hascycle(ListNode head) { if(head==null||head.next==null) { return false; } ListNode fast=head.next; ListNode slow=head; while(slow!=fast) { if(fast==null||f原创 2021-05-08 10:16:17 · 115 阅读 · 0 评论 -
leetcode刷题之递归算法简要概述
递归的三大步骤1.明确函数要做什么,也就是定义递归的功能。2.明确递归的结束(退出递归)的条件。3.找到函数的等价关系式,要不断缩小参数的范围模型一:在递去的过程中解决问题function recursion(大规模){ if (end_condition){ // 明确的递归终止条件 end; // 简单情景 }else{ // 在将问题转换为子问题的每一步,解决该步中剩余部分的问题原创 2021-05-08 10:15:47 · 99 阅读 · 0 评论 -
leetcode刷题之链表之递归
206.反转链表主要有两种解法,双指针迭代和递归方法1.双指针迭代法public ListNode reverseList(ListNode head) { ListNode pre=null; ListNode cur=head;//cur一开始赋值为头节点 ListNode tmp=null;//该变量负责保存cur的下一个节点,起暂存储功能 while(cur!=null) { tmp=cur.next; cur.next=pre;//cur原创 2021-05-08 10:15:11 · 199 阅读 · 0 评论 -
leetcode刷题之数组之滑动窗口
滑动窗口模版初始化慢指针 = 0初始化 ansfor 快指针 in 可迭代集合 更新窗口内信息(通常是快指针逐增,也就是对右边界进行操作) while 窗口内不符合题意 扩展或者收缩窗口(通常是对左边界进行操作) 慢指针移动 更新答案返回 ans看到题目想到要用滑动窗口法,关键词就在于“连续”,最后所求的大概率是一段连续子序列,同时不改变数组原来的位置。209.长度最小的子数组思路简述题目中要求找出长度最小的连续子数组,那么就要想到用滑动窗口来原创 2021-05-08 10:14:44 · 255 阅读 · 0 评论 -
leetcode刷题之数组之双指针
27.移除元素思路简述这个题有两种方法,第一种是暴力,另一种是双指针法。而且需要注意的是不能使用额外的数组空间。但这两种方法的本质相同,都是将不等于val的数移到数组左部,或者说,将等于val和不等于val的两部分进行分离。暴力法的核心算法是每当遇到一个等于val的数nums[i]时,就将下标i之后的所有数都向前移一位,移完后将数组nums的size减1。最后返回size;public static int removeelement(int[] nums,int val) { int原创 2021-05-08 10:14:19 · 152 阅读 · 0 评论 -
leetcode刷题之数组简单刷题记录
1.数组-简单-找到所有数组中消失的数字这道题的收获就是又重温了一下基本概念,空间复杂度和java里面list的使用。**本题思路简述**这个题的难点主要就是在于实现自己编写代码空间复杂度O(1),时间复杂度(n)。通过空间复杂度的要求,可以看出,最好我们自己不要再开辟一个新的数组了,就用题目中已经给的nums数组会比较好一些。主要思路就是对nums进行遍历,将里面每一个数字对应的i进行加n操作,然后再重新进一遍遍历,看看数组里哪一个i对应的nums[i]是小于n的,如果小于,那么就是我们需要原创 2021-05-08 10:13:02 · 135 阅读 · 0 评论