随笔分类 - 牛客网高频算法题系列
牛客网高频算法题系列
摘要:牛客网高频算法题系列-BM19-寻找峰值 题目描述 给定一个长度为n的数组nums,请你找到峰值并返回其索引。数组可能包含多个峰值,在这种情况下,返回任何一个所在位置即可。 峰值元素是指其值严格大于左右相邻值的元素。严格大于即不能有等于 假设 nums[-1] = nums[n] = -\infty
阅读全文
摘要:牛客网高频算法题系列-BM18-二维数组中的查找 题目描述 在一个二维数组array中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 原题目见:二维数组中的查找 解法一:
阅读全文
摘要:牛客网高频算法题系列-BM17-二分查找-I 题目描述 请实现无重复数字的升序数组的二分查找 给定一个 元素升序的、无重复数字的整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标(下标从 0 开始),否则返回 -1 原题目见:BM1
阅读全文
摘要:牛客网高频算法题系列-BM16-删除有序链表中重复的元素-II 题目描述 给出一个升序排序的链表,删除链表中的所有重复出现的元素,只保留原链表中只出现一次的元素。 原题目见:BM16 删除有序链表中重复的元素-II 解法一:链表遍历 首先,考虑特殊情况,如果链表为空或者只有一个结点,不会有重复的元素
阅读全文
摘要:牛客网高频算法题系列-BM15-删除有序链表中重复的元素-I 题目描述 删除给出链表中的重复元素(链表中元素从小到大有序),使链表中的所有元素都只出现一次 原题目见:BM15 删除有序链表中重复的元素-I 解法一:链表遍历 首先,考虑特殊情况,如果链表为空或者只有一个结点,不会有重复的元素,返回原链
阅读全文
摘要:牛客网高频算法题系列-BM14-链表的奇偶重排 题目描述 给定一个单链表,请设定一个函数,将链表的奇数位节点和偶数位节点分别放在一起,重排后输出。 注意是节点的编号而非节点的数值。 原题目见:BM14 链表的奇偶重排 解法一:链表遍历(使用额外空间) 首先,判断如果链表为空或者只有1或2个结点,不用
阅读全文
摘要:牛客网高频算法题系列-BM13-判断一个链表是否为回文结构 题目描述 给定一个链表,请判断该链表是否为回文结构。 回文是指该字符串正序逆序完全一致。 原题目见:BM13 判断一个链表是否为回文结构 解法一:链表遍历 首先,考虑特殊情况,如果链表为空或只有一个链表,默认是回文结构,直接返回true。
阅读全文
摘要:牛客网高频算法题系列-BM12-单链表的排序 题目描述 描述 原题目见:BM12 单链表的排序 解法一:数组排序 首先判断如果链表为空或者只有一个结点,则不需要排序,直接返回原链表。 否则,使用额外空间进行排序,处理过程如下: 首先遍历链表,将所有结点值暂存在一个List中; 然后,使用库函数将Li
阅读全文
摘要:牛客网高频算法题系列-BM11-链表相加(二) 题目描述 假设链表中每一个节点的值都在 0 - 9 之间,那么链表整体就可以代表一个整数。给定两个这种链表,请生成代表两个整数相加值的结果链表。 原题目见:BM11 链表相加(二) 解法一:使用栈 首先,特殊情况判断: 如果链表一为空,则直接返回链表二
阅读全文
摘要:牛客网高频算法题系列-BM10-两个链表的第一个公共结点 题目描述 输入两个无环的单向链表,找出它们的第一个公共结点,如果没有公共节点则返回空。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的) 原题目见:BM10 两个链表的第一个公共结点 解法一:双重循环
阅读全文
摘要:牛客网高频算法题系列-BM9-删除链表的倒数第n个节点 题目描述 给定一个链表,删除链表的倒数第 n 个节点并返回链表的头指针 原题目见:BM9 删除链表的倒数第n个节点 解法一:双指针法 首先,考虑两种特殊情况: 如果原链表为空,直接返回null。 如果k不是正数,直接返回null。 否则,使用双
阅读全文
摘要:牛客网高频算法题系列-BM8-链表中倒数最后k个结点 题目描述 描述:输入一个长度为 n 的链表,设链表中的元素的值为 ai ,返回该链表中倒数第k个节点。如果该链表长度小于k,请返回一个长度为 0 的链表。 原题目见:BM8 链表中倒数最后k个结点 解法一:双指针法 首先,考虑两种特殊情况: 如果
阅读全文
摘要:牛客网高频算法题系列-BM7-链表中环的入口结点 题目描述 给一个长度为n链表,若其中包含环,请找出该链表的环的入口结点,否则,返回null。 原题目见:BM7 链表中环的入口结点 解法一:双指针法 使用两个指针,fast 与 slow。它们起始都位于链表的头部。随后,slow 指针每次向后移动一个
阅读全文
摘要:牛客网高频算法题系列-BM6-判断链表中是否有环 题目描述 判断给定的链表中是否有环。如果有环则返回true,否则返回false。 原题目见:BM6 判断链表中是否有环 解法一:双指针法 使用两个指针,fast 与 slow。它们起始都位于链表的头部。随后,slow 指针每次向后移动一个位置,而fa
阅读全文
摘要:牛客网高频算法题系列-BM5-合并k个已排序的链表 题目描述 合并 k 个升序的链表并将结果作为一个升序的链表返回其头节点。 原题目见:BM5 合并k个已排序的链表 解法一:分治法 分治法,可以将大问题分解成小问题,然后继续分解成最小的子问题并解决之。 具体处理过程如下,将k个链表分解成2部分处理,
阅读全文
摘要:牛客网高频算法题系列-BM4-合并两个排序的链表 题目描述 输入两个递增的链表,单个链表的长度为n,合并这两个链表并使新链表中的节点仍然是递增排序的。 数据范围: 0 ⇐ n ⇐ 1000,-1000 ⇐ 节点值 ⇐ 1000 要求:空间复杂度 O(1),时间复杂度 O(n) 原题目见:BM4 合并
阅读全文
摘要:牛客网高频算法题系列-BM3-链表中的节点每k个一组翻转 题目描述 将给出的链表中的节点每 k 个一组翻转,返回翻转后的链表如果链表中的节点数不是 k 的倍数,将最后剩下的节点保持原样你不能更改节点中的值,只能更改节点本身。 原题目见:BM3 链表中的节点每k个一组翻转 解法一:递归 使用递归的方式
阅读全文
摘要:牛客网高频算法题系列-BM2-链表内指定区间反转 题目描述 将一个节点数为 size 链表 m 位置到 n 位置之间的区间反转,要求时间复杂度 O(n),空间复杂度 O(1)。 原题目见:BM2 链表内指定区间反转 解法一:链表遍历,指针交换 因为起始位置可能是头结点,所以首先设置一个虚拟的头结点d
阅读全文
摘要:牛客网高频算法题系列-BM1 反转链表 题目描述 给定一个单链表的头结点pHead(该头节点是有值的),长度为n,反转该链表后,返回新链表的表头。 原题目见:BM1 反转链表 解法一:结点反转 首先,如果head为空或者只有一个结点,直接返回。 否则,分别用first和next指针指向链表的前两个结
阅读全文