
哈希散列
SYaoJun
这个作者很懒,什么都没留下…
展开
-
1248. 统计「优美子数组」
思路考查点:哈希表题目:1248. 统计「优美子数组」思路: 从前往后统计奇数的个数,k = curOdd - preOdd目标奇数 = 当前前缀奇数总数 - 某个前面位置的前缀奇数总数。当我们把前缀奇数放入哈希表以后,等式转换为preOdd = curOdd - k只要这个preOdd存在,就说明是我们需要的一个答案,依次累加进最终结果。代码class Solution {public: int numberOfSubarrays(vector<int>& nu原创 2021-10-03 10:00:19 · 132 阅读 · 0 评论 -
5874. 分割数组的最多方案数
思路分割数组的最多方案数考查点:前缀和+哈希表看到有连续的子数组和,很明显在提示用前缀和,分析出要尽快获取前后缀匹配的数量,可以用哈希表。比较难处理的就是题目可以改变数组中某个数组,此时只影响前缀和后面的结果,因此我们可以将要查的值分为两段。当前修改元素之前的数当前修改元素之后的数更新数组后,目标值也改变了,我们可以考虑在修改元素之前求目标值,更新元素之后求修改后的目标值,两者之和即是结果。注意点:结果可能会超过int,记得使用long long62场双周赛,这是我最接近AK原创 2021-10-03 08:49:11 · 277 阅读 · 0 评论 -
7-43 字符串关键字的散列映射 (25 分)
哈希散列平方探测法1.平方是先正再负2.探测的基准是以起始位置为准3.开始时不能取模#include <iostream>#include <cstdio>#include <stack>#include <string>#include <cctype>#include <cstring>#include...原创 2019-10-20 21:53:02 · 1073 阅读 · 0 评论 -
7-42 整型关键字的散列映射 (25 分)
注意:重复出现的关键字,需要输出第一次在哈希表中的位置,不需要重新探测。#include <iostream>#include <cstdio>#include <algorithm>#include <queue>#include <vector>#include <cstring>#include <...原创 2019-10-20 15:49:18 · 666 阅读 · 0 评论 -
1116 Come on! Let's C (20 分)
注意:\color{red}注意:注意:1.如果某个ID不存在,即使之前查过,但是不能输出checked,而要输出Are you kidding?2.输出字符串的时候别忘了后面的标点符号本题通过哈希查找,对于不同的状态赋予不同的值,如果是正常的数据,那么必然存在大于零的值,如果等于零,表示该ID不存在,如果该ID为-1,表示之前查找过了,注意在输出的时候要标记该ID的状态。#include...原创 2019-08-31 22:12:58 · 108 阅读 · 0 评论 -
49. Group Anagrams
class Solution {public: vector<vector<string>> groupAnagrams(vector<string>& strs) { unordered_map<string, vector<string>> mp; for(auto str : str...原创 2019-09-01 09:44:58 · 92 阅读 · 0 评论 -
第一个缺失正数
#include <iostream>#include <vector>#include <algorithm>#include <cstdio>#include <map>using namespace std;int main(){ int x; char c; map<int, bool> mp; w...原创 2019-09-04 16:44:21 · 143 阅读 · 0 评论 -
1. 两数之和
思路先存,再查找class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { unordered_map<int, int> mp; for(int i = 0; i < nums.size(); i++){ ...原创 2019-08-19 11:25:39 · 91 阅读 · 0 评论 -
454. 4Sum II
哈希表class Solution {public: int fourSumCount(vector<int>& A, vector<int>& B, vector<int>& C, vector<int>& D) { //a+b+c+d == 0 ==> a + b == -c-d ...原创 2019-09-07 08:24:49 · 92 阅读 · 0 评论 -
560. Subarray Sum Equals K
class Solution {public: int subarraySum(vector<int>& nums, int k) { unordered_map<int, int> mp; //这是类,不是数组,所以不会越界 int sum = 0, res = 0; mp[0] = 1; //sum自身等...原创 2019-08-26 11:42:35 · 113 阅读 · 0 评论 -
继续xxx定律【浙江大学】【哈希散列】
牛客网题目链接思路只要是在其他数字计算过程中出现的就叫覆盖数,先用哈希表存起来,把可能关键数放在向量中,注意在输出时还需要判断一遍关键数。#include <iostream>#include <vector>#include <string>#include <cmath>#include <algorithm>#inc...原创 2019-10-05 14:12:08 · 109 阅读 · 0 评论 -
1032 挖掘机技术哪家强 (20 分)
这道题可以边输出边统计,稍微加速一下。使用unordered_map查找的时间复杂是O(1)O(1)O(1)而使用map需要自动调整先后顺序,因为它的底层是用红黑树实现的。所以无需的哈希,尽量用unordered_map注意这是C++11标准#include <iostream>#include <string>#include <vector>...原创 2019-08-31 10:05:06 · 146 阅读 · 0 评论 -
1002. A+B for Polynomials (25)
题目链接:https://www.patest.cn/contests/pat-a-practise/1002 解题思路:这种多项式相加的题很常见,这个算是比较基础的吧。记住两点,如果数据比较小,像这道题一样,则使用数组下标来表示指数;如果指数数据比较大而且离散的比较严重,这种情况就只能用链表了,相当于归并两个链表一样。 这道题用的数组下标表示指数,很简单。#include #inclu原创 2018-02-05 00:07:13 · 227 阅读 · 0 评论 -
1002 写出这个数 (20 分)
查看原题目请点我 解题思路:主要是字符串的处理,首先求和,然后把求得的数字转化为数字,再用对应的数字映射导对应的拼音进行输出。#include<cstdio>#include<cstring>char stt[][8]={"ling","yi","er","san","si","wu","liu",&原创 2018-03-15 12:17:18 · 400 阅读 · 0 评论 -
1043 输出PATest (20 分)
时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 给定一个长度不超过10000的、仅由英文字母构成的字符串。请将字符重新调整顺序,按“PATestPATest….”这样的顺序输出,并忽略其它字符。当然,六种字符的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按PATest的顺序打印,原创 2018-01-13 00:25:10 · 231 阅读 · 0 评论 -
1005 继续(3n+1)猜想 (25 分)
继续(3n+1)猜想 (25) 卡拉兹(Callatz)猜想已经在1001中给出了描述。在这个题目里,情况稍微有些复杂。当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数。例如对n=3进行验证的时候,我们需要计算3、5、8、4、2、1,则当我们对n=5、8、4、2进行验证的时候,就可以直接判定卡拉兹猜想的真伪,而不需要重复计算,因为这4个数已经在验证3的时候遇原创 2018-01-14 20:15:00 · 360 阅读 · 0 评论 -
1039 到底买不买 (20 分)
查看原题目请点我这里 解题思路 主要是散列,其次是对比将不足的记为负数。#include<cstdio>#include<cstring>const int maxn=1005;int arr[80]={0};int main(){ char str[maxn],stt[maxn]; scanf("%s%s",str,stt); ...原创 2018-03-16 22:03:34 · 429 阅读 · 0 评论 -
1038 统计同成绩学生 (20 分)
查看原题目请点我 解题思路:这是一道超级简单的题,散列就完事了!#include<cstdio>int Hash[100]={0};int main(){ int N,num,K; scanf("%d",&N); for(int i=0;i<N;i++){ scanf("%d",&num); ...原创 2018-03-13 12:06:05 · 222 阅读 · 0 评论 -
1083 是否存在相等的差 (20 分)
简单哈希数组题注意输出只需要输出重复的,出现一次不叫重复,我像个弱智一样反复读了好多遍题目才懂。#include<cstdio>#include<cmath>#include<algorithm>using namespace std;int hash[10005]={0};int arr[10005];int main(){ int n; ...原创 2019-01-24 12:09:12 · 147 阅读 · 0 评论 -
1041 Be Unique (20 分)
简单题可以用散列,也可以用map#include<cstdio>#include<map>using namespace std;const int maxn=1e4+5;int arr[maxn];int main(){ int n; map<int,int> mp; scanf("%d",&n); for(int i=0;i&l...原创 2019-02-16 13:06:24 · 172 阅读 · 0 评论 -
7-14 电话聊天狂人 (25 分)
使用STL标准模板库的map函数因为map函数自带排序功能,随意放入的内容都是按照字典序排列的,即从小到大所以这道题只要处理遍历一次,然后统计并列的情况,如果并列超过1,则需要按照另一个格式输出,否则只需输出通话最多的电话号码和通话次数。#include<cstdio>#include<iostream>#include<map>#include&l...原创 2019-02-11 12:36:56 · 824 阅读 · 0 评论 -
L1-034 点赞 (20 分)
直接散列,注意出现次数相同时,输出数值大的。#include<bits/stdc++.h>int arr[1005]={0};int main(){ int n,m,num; scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%d",&m); for(int i=0;i<m;i++){ sca...原创 2019-05-16 17:34:39 · 916 阅读 · 0 评论 -
1145 Hashing - Average Search Time (25 分)
题目链接平方探测k等于哈希表长度时,视为失败。#include<bits/stdc++.h>using namespace std;const int maxn = 1e5+5;int H[maxn]={0};int arr[maxn]={0};bool isPrime(int x){ if(x<=1) return false; int sqr = sqrt(...原创 2019-07-22 17:25:18 · 131 阅读 · 0 评论 -
1078 Hashing (25 分)
Hashing//1.判断给定的table size是否为素数,不是的话寻找大于该数最小的素数作为替代//2.平方探测#include<bits/stdc++.h>using namespace std;const int maxn = 1e5+5;int H[maxn]={0};bool isPrime(int x){ if(x<=1) return false...原创 2019-07-22 11:55:26 · 139 阅读 · 0 评论 -
剩下的树【清华大学】
题目描述 有一个长度为整数L(1输入描述: 两个整数L(1 接下来有M组整数,每组有一对数字。 输出描述: 可能有多组输入数据,对于每组输入数据,输出一个数,表示移走所有区间的树之后剩下的树的个数。 示例1 输入 500 3 100 200 150 300 470 471 输出 298解题思路:我开始以为是排序,然后把重合的部分拼接起来原创 2018-01-12 00:22:53 · 274 阅读 · 0 评论