C++算法+习题分析学习打卡--哈希,贪心,前缀和

一.学习内容

1.哈希

(1)字符统计(蓝桥云课)

重点分析:

  1.(16)哈希下标索引,由题目要求得到。如题目要求大写字母,所以就在A-Z查找。不用整个哈希表遍历。

  2.(16-28)查找最大次数:只要次数一旦大于maxcnt就重新将ret数组从下标0开始计算,同时将maxcnt更新为该次数,如果再次出现该次数就将其插入在后面。

  3.(13,29)为什么用char数组不用string:29行我们将ret[idx]赋值为'\0',由于可能出现在较靠前字符出现大量次数相同这种情况,即ret[idx]即后面可能存在字符,通过'\0‘将其切割,便于cout。

(2)字符串统计

分析:

  1.(16)unordered_map内含有直接统计键的个数函数size()。

  2.at(key)可以获取value,find(key)查找以key为键的键值对,找到则返回一个迭代器。通常与end()来判断是否键值对存在,hash.find(key)!=hash.end()。

(3)优质数对

 

分析:

  1.首先排除两层for循环 做法。最初想的是把用两个hash表将下标存入,想固定一个变量,通过A[hash1[i]]==B[hash2[i]]去判断,想的太简单了,数字会重复出现。然后看了下别人做的,他们称这种方法为“状态压缩”,我的理解是:首先从优质数对的共性出发,他们的和相等,但是在小数字范围内和相等的情况太多,比如4=1+3=2+2,所以将其中某个数字扩大合适的倍数(扩大优质数对里面同一个值),让其和唯一性,通过该性质来确定。

  2.(22-28)ret那里通过配对这种累加计算来累加,1+2+3+4......,h[x]为0时先让h[x]++,单个无法配对。

2.贪心

(1)分开元音字母

分析:

  1.(6)不能写成a=='a'||'b'||'c'......

  2.(15-29)cnt从0开始,cnt>1,ret+=")(",因为分割是从遍历到'('后第二个元音字母开始。由于第一个元音前没有元音,所以cnt从0开始。

 3.(12,20)通过flag来判断某一条件是否成立。

3.前缀和

  感觉就是跟高中学的数列求和差不多,不过数组里面的数是没规律的,但是还是满足Sn-Sn-1=an。

(1)一维数组的动态和

 分析:

  1.前缀和的模板。

(2)找到数组的中间位置

分析:

  1.(14)可以用三目运算符减少if条件。

二.总结反思

  目前处于初学阶段,题目考虑不够全面,特殊情况会忽略。基础知识遗忘。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值