
算法题解
分享算法题目的解题方法和体会
iversongzy
一个在山脚下准备爬山的人
展开
-
LinkedList- K 个一组翻转链表
问题: 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。 k 是一个正整数,它的值小于或等于链表的长度。 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。 输入:head = [1,2,3,4,5], k = 2 输出:[2,1,4,3,5] 解题思路: 如果K<2时链表没有变化,设置四个指针,pre,next为需要转换节点的边界,head,tail是需要转换节点的起始位置,分组进行字符串反转。 class Solution {原创 2021-03-10 22:58:17 · 132 阅读 · 0 评论 -
LinkedList-环形链表
问题1 给定一个链表,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。 如果链表中存在环,则返回 true 。 否则,返回 false 。 输入:head = [3,2,0,-4], pos = 1 输出:true 解释:链表中有一个原创 2021-03-10 22:56:03 · 344 阅读 · 0 评论 -
LinkedList-两两交换链表中的节点
问题: 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 输入:head = [1,2,3,4] 输出:[2,1,4,3] 解题思路: 这道题用文字叙述比较吃力,有图的演示就很清晰,此篇文章讲解的很好,大家可以参照下 https://leetcode-cn.com/problems/swap-nodes-in-pairs/solution/dong-hua-yan-shi-24-liang-liang-ji...原创 2021-03-10 22:53:29 · 486 阅读 · 0 评论 -
LinkedList-反转链表
问题: 反转一个单链表。 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 解题思路:此题可以使用递归思想求解。首先还是写出递归终止条件。然后假设只差最后一步没有反转,如例子:1->2<-3<-4<-5,我们需要做的就只剩下将2指向1就可以了。 class Solution { public ListNode reverseList(ListNode原创 2021-03-10 22:50:44 · 873 阅读 · 0 评论 -
Array-三数之和
题目: 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的三元组。 示例 1: 输入:nums = [-1,0,1,2,-1,-4] 输出:[[-1,-1,2],[-1,0,1]] 解题思路: 首先要给数组进行从小到大排序,然后从左往右依次遍历。固定左边值,因为题目要求是要找到和为0的数组,如果和为0,其中的元素要么有负数,要么都是0,如果都是整数不可原创 2021-03-09 00:53:39 · 116 阅读 · 0 评论 -
Array-爬楼梯
问题: 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数。 示例 1: 输入: 2 输出: 2 解释: 有两种方法可以爬到楼顶。 1. 1 阶 + 1 阶 2. 2 阶 解题思路: 此题使用递归的思路最好求解。这个题其实可以在纸上写出前几种情况的解法,找到他们的相同之处,找到最小重复子问题。假设我们已经知道n-1和n-2有多少种走法,也知道每次你可以爬 1 或 2 个台阶,所以n阶台阶的走法就是原创 2021-03-09 00:52:07 · 116 阅读 · 0 评论 -
Array-移动零
题目:给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 示例: 输入: [0,1,0,3,12] 输出: [1,3,12,0,0] 解题思路 任何一道题在解题时首先要考虑它的边界条件。定义变量index记录不为0元素的位置,同时使用for循环遍历,将不为0的值放在前面去,重点在11行,把0换到后面去。 27行的做法更为巧妙,当i > j 时,只需要把 i 的值赋值给j 并把原位置的值置0。同时这里也把交换操作换成了赋值操作。 class Sol原创 2021-03-09 00:50:29 · 170 阅读 · 0 评论 -
Array-盛最多水的容器
盛最多水的容器 题目:给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 输入:[1,8,6,2,5,4,8,3,7] 输出:49 解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。 解题思路 1、首先要想.原创 2021-03-09 00:47:28 · 107 阅读 · 0 评论