![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法题
记录做的算法题
Gebo
经历的都是过往,现在的才是未来。
展开
-
【Java实现】复杂链表的复制
题目描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),请对此链表进行复制,并返回复制后的头结点。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)思路用一个 hashmap保存新旧链表节点的对应的结点关系代码import java.util.HashMap;/*public class RandomListNode { int label; RandomListNode nex原创 2020-05-09 15:27:17 · 177 阅读 · 0 评论 -
巧用摩尔投票算法解数组中出现次数超过一半的数字
摩尔投票法介绍摩尔投票法(Boyer–Moore majority vote algorithm),也被称作「多数投票法」,算法解决的问题是:如何在任意多的候选人中(选票无序),选出获得票数最多的那个。算法可以分为两个阶段:对抗阶段:分属两个候选人的票数进行两两对抗抵消计数阶段:计算对抗结果中最后留下的候选人票数是否有效假设投票是这样的,[A, C, A, A, B],ABC是指三...原创 2020-04-29 18:42:44 · 377 阅读 · 2 评论 -
巧用双指针解和为S的两个数字、和为S的连续整数序列
1、和为S的两个数字1.1 题目描述输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。1.2 解题思路我们先审题,找出对我们有用的信息。“一个递增排序的数组”,“查找和为S的两个数”,“输出的两个数的乘积最小”如果你刷已经刷过一定的算法题了,那看到这道题基本就会想到用双指针解题如果你是一个小白,没做过...原创 2020-04-28 19:43:46 · 211 阅读 · 0 评论 -
【Java实现】滑动窗口中的最大值
题目描述给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5...原创 2020-04-19 17:02:36 · 425 阅读 · 0 评论 -
【Java实现】机器人运动范围
题目描述地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8= 19。请问该机器人能够达到多少个格子。解题思路看到这种题目中出现左,右,上...原创 2020-04-17 16:09:59 · 244 阅读 · 0 评论 -
【Java实现】二叉搜索树的第K个结点
题目描述给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点为4。解题思路这道题是找数组的第K小结点的变形题,都是先把它转换成一个升序的数组然后寻找第K个元素,但是如何把二叉搜索树转换成一个升序数组呢?我们根据二叉搜索树的特点,知道二叉搜索树的中序遍历就是一个升序数组,所以我们可以对给的二叉搜索树进行中序遍历再找到第K个...原创 2020-04-15 13:43:53 · 221 阅读 · 0 评论 -
【Java实现】序列化二叉树和反序列化二叉树
题目描述请实现两个函数,分别用来序列化和反序列化二叉树二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存。序列化可以基于先序、中序、后序、层序的二叉树遍历方式来进行修改,序列化的结果是一个字符串,序列化时通过 某种符号表示空节点(#),以 ! 表示一个结点值的结束(value!)。二叉树的反序列化是指:根据某种遍历顺序得到...原创 2020-04-14 15:24:20 · 213 阅读 · 0 评论 -
【Java实现】二叉树中和为某一值的路径
题目描述输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。解题思路这道题的解题思路就是对二叉树进行深度遍历,写一个递归方法返回当前路径下匹配目标值的路径,解题的关键是由题目中路径的定义我们可以知道走到最后的点必须是叶子节点,即最后加进ArrayList的节点为叶子节点,也就是该节点的左子节点和右...原创 2020-04-13 20:05:52 · 171 阅读 · 0 评论 -
【Java实现】两个链表的第一个共同结点
题目描述输入两个链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)解题思路:直接运用双指针法。创建两个指针pre和cur,分别指向两个链表的头结点,然后依次往后遍历。这里需要特别注意的是两个链表的长度不一样的情况:如果某个指针到达末尾,则将该指针指向另一个链表的头结点;如果两个指针所指的节点相同,则循环结束,返回当前...原创 2020-04-11 15:55:08 · 221 阅读 · 0 评论 -
【Java实现】删除链表中的重复结点
题目描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5。解题思路:遍历的同时把重复的结点删除,通过设置两个结点 pre 和 cur,如果 cur 和 cur.next 值相等,就让cur=cur.next, 一直向往下走...原创 2020-04-10 16:58:18 · 215 阅读 · 0 评论