【每日算法】基础算法——合并集合(三十)
题目内容一共有n个数,编号是1~n,最开始每个数各自在一个集合中。 现在要进行m个操作,操作共有两种: “M a b”,将编号为a和b的两个数所在的集合合并,如果两个数已经在同一个集合中,则忽略这个操作;“Q a b”,询问编号为a和b的两个数是否在同一个集合中; 输入格式第一行输入整数n和m。 接 ...
Read more
【每日算法】基础算法——最大异或对(二十九)
题目内容在给定的N个整数A1,A2……AN中选出两个进行xor(异或)运算,得到的结果最大是多少? 输入格式第一行输入一个整数N。 第二行输入N个整数A1~AN。 输出格式输出一个整数表示答案。 数据范围1≤N≤10^5 ,0≤Ai<2^31 输入样例31 2 3 输出样例3 题解 代码#in ...
Read more
【每日算法】基础算法——Trie树(二十八)
题目内容Trie字符串统计。维护一个字符串集合,支持两种操作: “I x”向集合中插入一个字符串x;“Q x”询问一个字符串在集合中出现了多少次。共有N个操作,输入的字符串总长度不超过 105,字符串仅包含小写英文字母。 输入格式第一行包含整数N,表示操作数。 接下来N行,每行包含一个操作指令,指令 ...
Read more
【每日算法】基础算法——KMP(二十七)
题目内容给定一个模式串S,以及一个模板串P,所有字符串中只包含大小写英文字母以及阿拉伯数字。模板串P在模式串S中多次作为子串出现。求出模板串P在模式串S中所有出现的位置的起始下标。 输入格式第一行输入整数N,表示字符串P的长度。第二行输入字符串P。第三行输入整数M,表示字符串S的长度。第四行输入字符 ...
Read more
【每日算法】基础算法——单调队列(二十六)
题目内容给定一个大小为n≤10^6的数组。 有一个大小为k的滑动窗口,它从数组的最左边移动到最右边。 您只能在窗口中看到k个数字。 每次滑动窗口向右移动一个位置。 以下是一个例子: 该数组为[1 3 -1 -3 5 3 6 7],k为3。您的任务是确定滑动窗口位于每个位置时,窗口中的最大值和最小值。 ...
Read more
【每日算法】基础算法——单调栈(二十五)
题目内容给定一个长度为N的整数数列,输出每个数左边第一个比它小的数,如果不存在则输出-1。 输入格式第一行包含整数N,表示数列长度。 第二行包含N个整数,表示整数数列。 输出格式共一行,包含N个整数,其中第i个数表示第i个数的左边第一个比它小的数,如果不存在则输出-1。 数据范围1≤N≤10^51≤ ...
Read more
【每日算法】基础算法——模拟队列(二十四)
题目内容实现一个队列,队列初始为空,支持四种操作: (1) “push x” – 向队尾插入一个数x; (2) “pop” – 从队头弹出一个数; (3) “empty” – 判断队列是否为空; (4) “query” – 查询队头元素。 现在要对队列进行M个操作,其中的每个操作3和操作4都要输出相 ...
Read more
【每日算法】基础算法——模拟栈(二十三)
题目内容实现一个栈,栈初始为空,支持四种操作: (1) “push x” – 向栈顶插入一个数x; (2) “pop” – 从栈顶弹出一个数; (3) “empty” – 判断栈是否为空; (4) “query” – 查询栈顶元素。 现在要对栈进行M个操作,其中的每个操作3和操作4都要输出相应的结果 ...
Read more
【每日算法】基础算法——双链表(二十二)
题目内容实现一个双链表,双链表初始为空,支持5种操作: (1) 在最左侧插入一个数; (2) 在最右侧插入一个数; (3) 将第k个插入的数删除; (4) 在第k个插入的数左侧插入一个数; (5) 在第k个插入的数右侧插入一个数 现在要对该链表进行M次操作,进行完所有操作后,从左到右输出整个链表。 ...
Read more
【每日算法】基础算法——单链表(二十一)
题目内容实现一个单链表,链表初始为空,支持三种操作: (1) 向链表头插入一个数; (2) 删除第k个插入的数后面的数; (3) 在第k个插入的数后插入一个数 现在要对该链表进行M次操作,进行完所有操作后,从头到尾输出整个链表。 注意:题目中第k个插入的数并不是指当前链表的第k个数。例如操作过程中一 ...
Read more