随笔分类 -  算法

算法
摘要:描述 据说著名犹太历史学家 Josephus 有过以下故事:在罗马人占领乔塔帕特后,39 个犹太人与 Josephus 及他的朋友躲到一个洞中,39 个犹太人决定宁愿死也不要被敌人抓到,于是决定了一种自杀方式,41 个人排成一个圆圈,由第 1 个人开始报数,报数到 3 的人就自杀,然后再由下一个人重 阅读全文
posted @ 2022-11-08 17:13 思凡念真 阅读(40) 评论(0) 推荐(0) 编辑
摘要:描述 给定一个单链表,在链表中把第 L 个节点到第 R 个节点这一部分进行反转。 输入描述: n 表示单链表的长度。val 表示单链表各个节点的值。L 表示翻转区间的左端点。R 表示翻转区间的右端点。 输出描述: 在给定的函数中返回指定链表的头指针。 示例1 输入: 5 1 2 3 4 5 1 3 阅读全文
posted @ 2022-11-08 16:00 思凡念真 阅读(50) 评论(0) 推荐(0) 编辑
摘要:描述 实现反转单向链表和双向链表的函数。 如 1->2->3 反转后变成 3->2->1。 输入描述: 第一行一个整数 n,表示单链表的长度。第二行 n 个整数 val 表示单链表的各个节点。第三行一个整数 m,表示双链表的长度。第四行 m 个整数 val 表示双链表的各个节点。 输出描述: 在给定 阅读全文
posted @ 2022-07-11 10:32 思凡念真 阅读(129) 评论(2) 推荐(0) 编辑
摘要:描述 给定一个链表,实现删除链表第 K 个节点的函数。 输入描述: n 表示链表的长度。m 表示删除链表第几个节点。val 表示链表节点的值。 输出描述: 在给定的函数中返回链表的头指针。 示例1 输入: 5 3 1 2 3 4 5 输出: 1 2 4 5 思路 删除链表中的节点,本质都是找到其前一 阅读全文
posted @ 2022-07-08 14:26 思凡念真 阅读(256) 评论(0) 推荐(0) 编辑
摘要:描述 给出一个单链表,返回删除单链表的倒数第 K 个节点后的链表。 输入描述: 第一行输入两个正整数 n, K ,分别表示链表的长度和要删除单链表倒数第K个节点。 接下来一行有 n 个整数,依次表示单链表中的各个节点的节点值val。 输出描述: 在给定的函数内返回删除倒数第K个节点后的链表的头指针。 阅读全文
posted @ 2022-07-08 14:04 思凡念真 阅读(74) 评论(0) 推荐(0) 编辑
摘要:描述 给定两个升序链表,打印两个升序链表的公共部分。 输入描述: 第一个链表的长度为 n。第二个链表的长度为 m。链表结点的值为 val。 输出描述: 输出一行整数表示两个升序链表的公共部分的值 (按升序输出)。 示例1 输入: 4 1 2 3 4 5 1 2 3 5 6 输出: 1 2 3 思路 阅读全文
posted @ 2022-07-08 11:33 思凡念真 阅读(57) 评论(0) 推荐(0) 编辑
摘要:描述 给出一个单链表,返回删除单链表的倒数第 K 个节点后的链表。 输入描述: 第一行输入两个正整数 n, K ,分别表示链表的长度和要删除单链表倒数第K个节点。 接下来一行有 n 个整数,依次表示单链表中的各个节点的节点值val。 输出描述: 在给定的函数内返回删除倒数第K个节点后的链表的头指针。 阅读全文
posted @ 2022-07-06 14:47 思凡念真 阅读(65) 评论(0) 推荐(0) 编辑
摘要:描述 给定两个升序链表,打印两个升序链表的公共部分。 输入描述: 第一个链表的长度为 n。第二个链表的长度为 m。链表结点的值为 val。 输出描述: 输出一行整数表示两个升序链表的公共部分的值 (按升序输出)。 示例1 输入: 4 1 2 3 4 5 1 2 3 5 6 输出: 1 2 3 思路 阅读全文
posted @ 2022-07-06 11:31 思凡念真 阅读(28) 评论(0) 推荐(0) 编辑
摘要:描述 一个不含有负数的数组可以代表一圈环形山,每个位置的值代表山的高度。比如,{3,1,2,4,5},{4,5,3,1,2}或{1,2,4,5,3}都代表同样结构的环形山。3->1->2->4->5->3 方向叫作 next 方向(逆时针),3->5->4->2->1->3 方向叫作 last 方向 阅读全文
posted @ 2022-07-04 17:49 思凡念真 阅读(129) 评论(0) 推荐(0) 编辑
摘要:描述 给定数组 arr 和整数 num,共返回有多少个子数组满足如下情况: max(arr[i...j]) - min(arr[i...j]) <= num max(arr[i...j])表示子数组arr[i...j]中的最大值,min[arr[i...j])表示子数组arr[i...j]中的最小值 阅读全文
posted @ 2022-07-04 15:45 思凡念真 阅读(147) 评论(0) 推荐(0) 编辑
摘要:描述 给定一个整型矩阵 map,其中的值只有 0 和 1 两种,求其中全是 1 的所有矩形区域中,最大的矩形区域里 1 的数量。 输入描述: 第一行输入两个整数 n 和 m,代表 n*m 的矩阵接下来输入一个 n*m 的矩阵 输出描述: 输出其中全是 1 的所有矩形区域中,最大的矩形区域里 1 的数 阅读全文
posted @ 2022-04-18 11:37 思凡念真 阅读(197) 评论(0) 推荐(0) 编辑
摘要:单调栈(monotone-stack)是指栈内元素(栈底到栈顶)都是(严格)单调递增或者单调递减的。 如果有新的元素入栈,栈调整过程中 会将所有破坏单调性的栈顶元素出栈,并且出栈的元素不会再次入栈 。由于每个元素只有一次入栈和出栈的操作,所以 单调栈的维护时间复杂度是O(n) 。 单调栈性质: 单调 阅读全文
posted @ 2022-04-15 19:47 思凡念真 阅读(188) 评论(0) 推荐(0) 编辑
摘要:描述 有一个整型数组arr和一个大小为w的窗口从数组的最左边滑到最右边,窗口每次向右边滑一个位置,求每一种窗口状态下的最大值。(如果数组长度为n,窗口大小为w,则一共产生n-w+1个窗口的最大值) 输入描述: 第一行输入n和w,分别代表数组长度和窗口大小 第二行输入n个整数X_iXi​,表示数组中的 阅读全文
posted @ 2022-01-28 14:46 思凡念真 阅读(97) 评论(0) 推荐(0) 编辑
摘要:描述 汉诺塔问题比较经典,这里修改一下游戏规则:现在限制不能从最左侧的塔直接移动到最右侧,也不能从最右侧直接移动到最左侧,而是必须经过中间。求当塔有n层的时候,打印最优移动过程和最优移动总步数。 输入描述: 输入一个数n,表示塔层数 输出描述: 按样例格式输出最优移动过程和最优移动总步数 示例 输入 阅读全文
posted @ 2022-01-14 16:16 思凡念真 阅读(422) 评论(0) 推荐(0) 编辑
摘要:描述 一个栈中元素的类型为整型,现在想将该栈从顶到底按从大到小的顺序排序,只许申请一个栈。除此之外,可以申请新的变量,但不能申请额外的数据结构。如何完成排序? 输入描述: 第一行输入一个N,表示栈中元素的个数 第二行输入N个整数a_iai​表示栈顶到栈底的各个元素 输出描述: 输出一行表示排序后的栈 阅读全文
posted @ 2022-01-13 17:50 思凡念真 阅读(82) 评论(0) 推荐(0) 编辑
摘要:描述 实现一种猫狗队列的结构,要求如下: 1. 用户可以调用 add 方法将 cat 或者 dog 放入队列中 2. 用户可以调用 pollAll 方法将队列中的 cat 和 dog 按照进队列的先后顺序依次弹出 3. 用户可以调用 pollDog 方法将队列中的 dog 按照进队列的先后顺序依次弹 阅读全文
posted @ 2022-01-13 15:51 思凡念真 阅读(107) 评论(0) 推荐(0) 编辑
摘要:描述 给定一个无序数组arr,其中元素只能是1或0。求arr所有的子数组中0和1个数相等的最长子数组的长度 [要求] 时间复杂度为O(n)O(n),空间复杂度为O(n)O(n) 输入描述: 第一行一个整数N,表示数组长度接下来一行有N个数表示数组中的数 输出描述: 输出一个整数表示答案 示例1 输入 阅读全文
posted @ 2022-01-11 15:13 思凡念真 阅读(24) 评论(0) 推荐(0) 编辑
摘要:描述 给定一个无序数组arr,其中元素可正、可负、可0。求arr所有子数组中正数与负数个数相等的最长子数组的长度。 [要求] 时间复杂度为O(n)O(n),空间复杂度为O(n)O(n) 输入描述: 第一行一个整数N,表示数组长度接下来一行有N个数表示数组中的数 输出描述: 输出一个整数表示答案 示例 阅读全文
posted @ 2022-01-11 14:19 思凡念真 阅读(44) 评论(0) 推荐(0) 编辑
摘要:描述 给定一个无序数组arr, 其中元素可正、可负、可0。给定一个整数k,求arr所有子数组中累加和为k的最长子数组长度 输入描述: 第一行两个整数N, k。N表示数组长度,k的定义已在题目描述中给出第二行N个整数表示数组内的数 输出描述: 输出一个整数表示答案 示例1 输入: 5 0 1 -2 1 阅读全文
posted @ 2022-01-11 14:07 思凡念真 阅读(44) 评论(0) 推荐(0) 编辑
摘要:描述 给定一个数组arr,该数组无序,但每个值均为正数,再给定一个正数k。求arr的所有子数组中所有元素相加和为k的最长连续子数组的长度 例如,arr = [1, 2, 1, 1, 1], k = 3 累加和为3的最长连续子数组为[1, 1, 1],所以结果返回3 [要求] 时间复杂度为O(n)O( 阅读全文
posted @ 2022-01-11 10:55 思凡念真 阅读(46) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示