随笔分类 -  数据结构与算法

摘要:问: 有10G的订单数据,希望订单金额(假设都是正整数)进行排序,但我们内存有限,只有几百MB,如何进行排序? 答: 因内存有限,需要排序的数据量巨大,所以,此时需要外部排序,外部排序采用的是一种分治思想,外部排序最常用的是多路归并排序,即将大数据切成多份一次可以载入内存的小数据,对小数据进行内存排 阅读全文
posted @ 2023-12-29 23:16 牛犁heart 阅读(61) 评论(0) 推荐(0)
摘要:因该方法实现与之前记录的不同,就想着记录下。。。 重点inplace_partition函数的实现 注意:迭代器范围都是左闭右开的区间 std::iter_swap(last_greater, --first_equal); if(comp(*last_greater, pivot)) { std: 阅读全文
posted @ 2022-05-08 19:02 牛犁heart 阅读(39) 评论(0) 推荐(0)
摘要:如何实现浏览器的前进、后退功能?其实,用两个栈就可以非常完美地解决这个问题。 使用两个栈,X 和 Y,我们把首次浏览的页面依次压入栈 X,当点击后退按钮时,再依次从栈 X 中出栈,并将出栈的数据依次放入栈 Y。当我们点击前进按钮时,我们依次从栈 Y 中取出数据,放入栈 X 中。当栈 X 中没有数据时 阅读全文
posted @ 2022-05-02 19:20 牛犁heart 阅读(459) 评论(0) 推荐(0)
摘要:###引入 看个例子: // array表示一个长度为n的数组 // 代码中的array.length就等于n int[] array = new int[n]; int count = 0; void insert(int val) { if (count == array.length) { i 阅读全文
posted @ 2022-04-16 21:28 牛犁heart 阅读(107) 评论(0) 推荐(0)
摘要:题目描述 给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。 有效的 IP 地址正好由四个整数(每个整数位于 0 到 255 之间组成),整数之间用 '.' 分隔。 示例 输入: "25525511135" 输出: ["255.255.11.135", "255.255.111.3 阅读全文
posted @ 2020-08-09 09:47 牛犁heart 阅读(547) 评论(0) 推荐(0)
摘要:实现 pow(x, n) ,即计算 x 的 n 次幂函数。 示例 1: 输入: 2.00000, 10 输出: 1024.00000 示例 2: 输入: 2.10000, 3 输出: 9.26100 示例 3: 输入: 2.00000, -2 输出: 0.25000 解释: 2-2 = 1/22 = 阅读全文
posted @ 2020-08-07 21:06 牛犁heart 阅读(308) 评论(0) 推荐(0)
摘要:###题目描述 在一场集体婚礼上,有n对新人需要坐在连续排列的 2n个座位上合影,同一对新人彼此挨着。由于进场时各对新人并未按序入座,请计算最少交换座位的次数,以便使每对新人均可并肩坐在一起。一次交换可选择任意两人,让他们互换座位。 全部新人的序号可用 0 到 2n-1 的整数表示,第一对是 (0, 阅读全文
posted @ 2020-04-29 12:41 牛犁heart 阅读(387) 评论(0) 推荐(0)
摘要:时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M 题目描述 给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n 1并且m 1),每段绳子的长度记为k[0],k[1],...,k[m]。请问k[0]xk[1]x...xk[m]可能的最大乘积是多 阅读全文
posted @ 2020-04-15 12:57 牛犁heart 阅读(230) 评论(0) 推荐(0)
摘要:时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M 题目描述 地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格( 阅读全文
posted @ 2020-04-15 12:09 牛犁heart 阅读(120) 评论(0) 推荐(0)
摘要:时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M 题目描述 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子 阅读全文
posted @ 2020-04-15 10:53 牛犁heart 阅读(191) 评论(0) 推荐(0)
摘要:时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M 题目描述 给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5 阅读全文
posted @ 2020-04-14 21:09 牛犁heart 阅读(236) 评论(0) 推荐(0)
摘要:时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M 题目描述 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Inse 阅读全文
posted @ 2020-04-14 20:21 牛犁heart 阅读(229) 评论(0) 推荐(0)
摘要:时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M 题目描述 给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。 思路: 根据二叉搜索树的特性:左小右大,采用中序遍历二叉树,得到的序列即 阅读全文
posted @ 2020-04-14 14:31 牛犁heart 阅读(184) 评论(0) 推荐(0)
摘要:时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M 题目描述 请实现两个函数,分别用来序列化和反序列化二叉树 二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存。序列化可以基于先序、中序、后序、 阅读全文
posted @ 2020-04-13 22:10 牛犁heart 阅读(311) 评论(0) 推荐(0)
摘要:时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M 题目描述 从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。 思路: 广度优先搜索,借助队列 阅读全文
posted @ 2020-04-13 17:50 牛犁heart 阅读(103) 评论(0) 推荐(0)
摘要:时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M 题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。 思路: 广度优先搜索策略(借助队列),并偶数行进行反转 阅读全文
posted @ 2020-04-13 17:41 牛犁heart 阅读(141) 评论(0) 推荐(0)
摘要:时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M 题目描述 请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。 思路: 判断二叉树是否对称。首先判断该二叉树是否为空,若不为空,根节点及其左右子树,判断左 阅读全文
posted @ 2020-04-12 17:55 牛犁heart 阅读(144) 评论(0) 推荐(0)
摘要:时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M 题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。 思路: 中序遍历:左中右,分析二叉树的下一个结点,一种有以下几种情 阅读全文
posted @ 2020-04-12 17:30 牛犁heart 阅读(139) 评论(0) 推荐(0)
摘要:时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M 题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1 2 3 3 4 4 5 处理后为 1 2 5 思路: 根据题目要求:删除所有重复的结点。设 阅读全文
posted @ 2020-04-12 16:38 牛犁heart 阅读(179) 评论(0) 推荐(0)
摘要:时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M 题目描述 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。 思路: 设置快慢指针都从链表头出发,快指针每次走 两步 ,慢指针每次走 一步 ,假如有环,一定可以相遇于环中某点(结论1)。接 阅读全文
posted @ 2020-04-11 21:58 牛犁heart 阅读(175) 评论(0) 推荐(0)