标签:算法
题面 Description 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作: 插入x数 删除x数(若有多个相同的数,因只删除一个) 查询x数的排名(若有多个相同的数,因输出最小的排名) 查询排名为x的数 求x的前驱(前驱定义为小于x,且最大的数) 求x的后继(后继定义为
题面 题目描述 HH有个一成不变的习惯,喜欢饭后百步走。所谓百步走,就是散步,就是在一定的时间 内,走过一定的距离。 但是同时HH又是个喜欢变化的人,所以他不会立刻沿着刚刚走来的路走回。 又因为HH是个喜欢变化的人,所以他每天走过的路径都不完全一样,他想知道他究竟有多 少种散步的方法。 现在给你学校
题目: 输入一组整数,求出这组数字子序列和中最大值。也就是只要求出最大子序列的和,不必求出最大的那个序列。例如: 序列:-2 11 -4 13 -5 -2,则最大子序列和为20。 序列:-6 2 4 -7 5 3 2 -1 6 -9 10 -2,则最大子序列和为16。   1. 1 /* 2
题面 Description HH有一串由各种漂亮的贝壳组成的项链。HH相信不同的贝壳会带来好运,所以每次散步 完后,他都会随意取出一段贝壳,思考它们所表达的含义。HH不断地收集新的贝壳,因此, 他的项链变得越来越长。有一天,他突然提出了一个问题:某一段贝壳中,包含了多少种不同 的贝壳?这个问题很难
数据结构与算法中简单的排序差不多就冒泡排序,选择排序,插入排序这些了,另外根据数组存储的元素是对象,还有一个对象排序,其实就是在比较的时候抽出对应对象的某一字段进行比较罢了。 首先讲讲冒泡排序,这里只讲第一轮比较,后面的以此类推。首先取出数组第一个元素,然后与它后面的第一个元素进行比较(此时是从小到
题面 具体题目不再叙述,参考洛谷 题目大意,求区间[l,r]中第k大的数 题解 主席树很经典的运用 首先将值离散化之后,构建一颗值域线段树 储存区间和 0版本的线段树是空树 每次在值域上增加1就重构一颗线段树 很显然,任意两颗相邻线段树的值得和差为1 而相同的区间内要么相等要么多1 那么,我们也很容
快速排序是综合性能非常好的一种排序方法,它的思想是:每次选取一个数,将序列中所有比该数据小的数放到一边,反之放到另一边,然后对该数据左边的序列和右边的序列分别利用相同的方法进行继续排序。同样,以数字序列5,3,2,1,4为例,分析快排的排序过程,根据描述可以初步得出排序过程,这里以一个表格的形式展示
数组简单分为有序数组和无序数组,根据其存储的数据类型,除了基本数据类型外,还有存储对象的数组 这里,我们用java简单实现下有序数组,无序数组和存储对象的数组 无序数组: public class MyArray { int[] intArr; int arrLen; //存放数组的真实长度
问题描述   桌面上有 R 张红牌和 B 张黑牌,随机打乱顺序后放在桌面上,开始一张一张地翻牌,翻到红牌得到 1 美元,黑牌则付出 1 美元。可以随时停止翻牌,在最优策略下平均能得到多少钱。 输入格式   一行输入两个数 R、B。 输出格式   在最
题面 Description 这是一道非常直白的可持久化线段树的练习题,目的并不是虐人,而是指导你入门可持久化数据结构。 线段树有个非常经典的应用是处理RMQ问题,即区间最大/最小值询问问题。现在我们把这个问题可持久化一下: Q k l r 查询数列在第k个版本时,区间[l, r]上的最大值 M k
今天我们要将前两篇的随笔总结一下,用面向对象的思想封装一下,使它能够更容易的扩展。  首先我们要设计一个类,让他能够同时表示操作符和操作数 public enum OperationType { /** * 操作值 */ VALUE, /**
二叉树平衡检查 题目描述 实现一个函数,检查二叉树是否平衡,平衡的定义如下,对于树中任意一个结点,两颗子树的高度差不超过1。给定指向树根结点的指针TreeNode* root,请返回一个bool,代表这棵树是否平衡。 解题思路 树结构自身就是递归定义,很多问题都可以利用递归巧妙地实现,对于这道题,关
首先我们想设计的表达式支持的数:整数(正整数,0,负整数)还有小数,注意了不仅仅只支持个位整数(之前做的都太局限了) 那么我们正常的表达式要做一下处理,让它能区分出操作符和操作数,方便我们更好的处理 想法:如果有东西能够隔开操作符和操作数就好了.。那行,那我们就用空格隔开吧 为什么要用空格? 因为有