LeetCode 83.删除排序链表中的重复元素
删除排序链表中的重复元素
给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次*。返回已排序的链表 。
输入:head = [1,1,2,3,3]输出:[1,2,3]
方法:一次遍历
算法思路:
若当前cur的值与cur.next相同,那么将cur.next删除,否则,cur指向cur.next。
代码实现:
class Solution { public ListNode deleteDuplicates(ListNode head) { if(head == null){ return null; } ListNode cur = head; while(cur.next != null){ if(cur.val == cur.next.val){ cur.next = cur.next.next; }else{ ...
LeetCode 67.二进制求和
二进制求和
LeetCode 67.二进制求和
给你两个二进制字符串,返回它们的和(用二进制表示)。
输入为 非空 字符串且只包含数字 1 和 0。
输入:a = "11", b = "1"输出:"100"输入:a = "1010", b = "1011"输出:“10101”
方法: 模拟
算法思路:
设置变量carry记录上一个位置的进位,初始值为0
使用StringBuilder拼接字符串,a、b从后往前遍历,最后将StringBuilder反转
代码实现:
class Solution { public String addBinary(String a, String b) { int carry = 0; StringBuilder sb = new StringBuilder(); int i = a.length() - 1; int j = b.length() - 1; ...
LeetCode 680.验证回文串Ⅱ
验证回文串Ⅱ
LeetCode 680.验证回文串Ⅱ
给你一个字符串 s,最多可以从中删除一个字符。
请你判断 s 是否能成为回文字符串:如果能,返回 true ;否则,返回 false 。
输入:s = "aba"输出:true输入:s = "abca"输出:true解释:你可以删除字符 'c'。
方法:递归
算法思路:
构造判断是否为回文串方法isPalindrome,使用双指针法
对字符串进行双指针遍历,如果双指针所指的字符不同,则判断去除当前指针位置字符(左指针或右指针)的后续字符串是否为回文串
代码实现:
class Solution { public boolean validPalindrome(String s) { for(int i = 0, j = s.length() - 1; i < j; i++, j--){ if(s.charAt(i) != s.charAt(j)){ ...
LeetCode 92.反转链表II
反转链表II
给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置right 的链表节点,返回 反转后的链表 。
输入:head = [1,2,3,4,5], left = 2, right = 4输出:[1,4,3,2,5]
方法:分解后拼接
算法思路:
设置哑节点dummyNode,记录开始位置。
设置pre节点,位移到需反转链表前一位,设置节点leftNode = pre.next后,执行pre.next = null断开链接。
设置rightNode = pre,位移至需反转链表末位,记录cur = rightNode.next,执行rightNode.next = null断开链接。
编写反转链表代码,反转leftNode。
pre.next = rightNode与leftNode.next = cur链接三段链表。
代码实现:
class Solution { public ListNode reverseBetween(ListNode head, i ...
LeetCode 21.合并两个有序链表
反转链表
21. 合并两个有序链表 - 力扣(LeetCode)
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]
方法一:递归
算法思路:
比较两个链表的头部值,较小的一个节点与剩下元素的merge操作结果合并。
代码实现:
class Solution { public ListNode mergeTwoLists(ListNode list1, ListNode list2) { if(list1 == null){ return list2; }else if(list2 == null){ return list1; }else if(list1.val <= list2.val){ list1.next = mergeTwoLists(lis ...
LeetCode 206.反转链表
反转链表
206. 反转链表 - 力扣(LeetCode)
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
输入:head = [1,2,3,4,5]输出:[5,4,3,2,1]
方法一
算法思路:
将next = cur.next储存起来
cur.next = pre
pre与cur向后移
代码实现:
class Solution { public ListNode reverseList(ListNode head) { ListNode pre = null; ListNode cur = head; while(cur != null){ ListNode next = cur.next; cur.next = pre; pre = cur; cur = next; } return pre; }
复杂度分析:
时间复杂度:O( ...
LeetCode 160.相交链表
相交链表
LeetCode 160.相交链表
给你两个单链表的头节点headA和headB,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回null。
图示两个链表在节点C1开始相交:
题目数据保证整个链式结构中不存在环。
注意,函数返回结果后,链表必须保持其原始结构。
方法1:双指针
算法思路:
设A的长度为a + c,B的长度为b + c,其中c 为尾部公共部分长度,可知 a + c + b = b + c + a。
当访问 A 链表的指针访问到链表尾部时,令它从链表 B 的头部开始访问链表 B;同样地,当访问 B 链表的指针访问到链表尾部时,令它从链表 A 的头部开始访问链表 A。这样就能控制访问 A 和 B 两个链表的指针能同时访问到交点。
如果不存在交点,那么 a + b = b + a,以下实现代码中 l1 和 l2 会同时为 null,从而退出循环。
代码实现:
public ListNode getIntersectionNode(ListNode headA, ListNode headB) { ListNode l1 = ...
Spring5学习之路(1) IOC容器
IOC概念和原理
概念:控制反转,把对象创建和对象的调用过程交给Spring进行管理。
目的:降低耦合度
底层原理:xml,反射,工厂模式
为何要做这样一种操作,可以参考普通创建对象方式与工厂模式的区别。
原始的创建对象的方式耦合度太高,当UserDao发生变化时,UserService也要跟着进行修改。为实现高内聚、低耦合的目标,可以使用工厂模式。
若要进一步降低耦合度,可以使用IOC进行解耦。
//第一步:xml配置文件,配置创建的对象<bean id = "dao" class = "com.atguigu.UserDao"></bean> //第二步:有service类和dao类,创建工厂类(该步骤由spring执行)class UserFactory{ public static UserDao getDao(){ String classValue = class属性值; //1、xml解析,此处class属性值为com.atguigu.UserDao Class ...
LeetCode 104.二叉树的最大深度
二叉树的最大深度
LeetCode 104.二叉树的最大深度
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
示例:
Input: root = [3,9,20,null,null,15,7]Output: 3
方法1:递归/深度优先搜索
算法思路:
如果已知左子树和右子树的最大深度lll和rrr,则二叉树的最大深度为max(l,r)+1max(l,r) + 1max(l,r)+1
左子树和右子树的最大深度又可以以同样的方式进行计算
递归的终止条件:访问到空节点
代码实现:
class Solution { public int maxDepth(TreeNode root) { if (root == null) { return 0; } else { int leftHeight = maxDepth(root.left); i ...
hexo博客部署时提示use a personal access token instead的解决方法
问题
在跟随up主codesheep搭建hexo博客时,在进行到使用hexo d命令部署到github仓库时,输入完账号密码后会弹出如下的错误信息,这是因为github不允许使用账号密码连接了,需要创建自己的token。
Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.
解决方法
生成新SSH
ssh-keygen -t rsa -C "yourmail@example.com"
"yourmail@example.com"中填写注册github所用的邮箱。然后会提示生成路径,记住路径并一路回车(也可以自己输入路径),在相应的路径会生成.ssh和.ssh.pub文件,如果并没有找到的话,可点击Command + Shift +.(句号)来显示隐藏文件。
绑定SSH
登陆Github,依次点击右上角头像框->Settings-> SSH and G ...