本周c++学习小结和心得

上网课的时间过得真快,不知不觉一周又过去了。感觉上一次写博客仿佛就在昨天。这周费老向我们发了一个ICPC省赛,我犹豫再三,最终还是决定不去。因为我清楚我自己的实力,我明白以我现在的水平去参加比赛感觉就像是鸡蛋碰石头,所以还不如现在先储精蓄锐到大二再去参加,至少会比我现在更有水平一点,获奖虽然很难,但我也想去见识见识。

那接下来就说一说我这一周都干了些什么吧。平常我都是在空闲之余看“算法笔记”最近研究哪一部分内容就挑哪一部分看,由于现在是线上教学,感觉整体进度都慢了一丝丝,所以平常也多出了更多空闲的时间。但加入的dangjian更是让我忙不过来,组织需要我,既来之则安之,同时也让我意识到了时间的珍贵性,因此我比以前更要抓紧我的时间因为我的空闲时间又比别人少了一半。所以我每天完成主修课相应的复习和任务后,我就会看“算法笔记”,或者我给自己规定先看上多长时间的算法笔记,然后再去做一些别的科目。我平时是以“算法笔记”为主,费老给的“要看的资料”为辅,书上相关的看完了或者搞不懂的时候去资料里面翻翻。

接下来说正事:

1、(1)这周接触最多的就是二分算法(必须在升序情况下),可能这是算法里面最容易理解也最容易实现的一个,但是细节!!!细节决定成败!!!尤其是while(l<r)或者while(l<=r),他们和{}内的内容都是相关联的,如果只改动一个符号,也不能够AC。开始我以为while(l<r or l<=r)这两者是不能在同一种类型的题目中用的,于是我开始各种搜索什么时候用l<r什么时候l<=r,但一番搜索和做题后发现这两个是可以互换的,只不过要改里面的条件。

(2)l<r的结束条件边界是l>=r, 循环时的区间是[l,r)左闭右开,因此l在但r不在判断的范围内;如果mid偏大,r = mid,mid不可能是我们要找的数,而r端点本来就不会是答案,所以可以这么写;如果mid偏小,则l=mid+1(这里也涉及到一个死循环问题,如果l=mid则最后可能l一直是mid,永远<r,就进入了死循环)。l<=r时,[l,r]左闭右闭,r也在判断范围内,所以这时往往r=mid-1(mid已经被判断过了该判断mid-1了,而右端点又是闭区间),当然具体情况还是要根据原题分析。

(3)值得注意的是有时(l+r)/2会越界可以用l+(r-1)/2

(4)通过资料得知还有个三分,三分的题我还没做过只了解了个大概,三分应用于有峰值的一组数据,小大小或者大小大,{lmid = l + (r-l)/3,rmid = r - (r-l)/3,ans(lmid) < ans(rmid))时r = rr,反之l=ll

(5)如果涉及浮点数的查找一般限制条件是精度,l-s<eps(一般是1e-5)

2、当定义一个指针并指向数组时,可以用指针代替数组,特别是在构造函数的参数中,用指针更加方便,同时也可以用p=a~a+n的循环来输出数组

3、思维的转换,在做题时想不出来好的办法可以换一种角度去思考他往往会简单许多

比如求最后一个满足k>=K时的长度L,一个一个的找下去还不如找第一个k<K时的长度L(保证为整数)然后再减1;

4、在这记录一些看资料的小收获

(1)求a^n,快速幂,可以用递归(n是偶数则(a^n/2)^2,n是奇数则-1再视为偶数);也可以把n写成二进制(a^13=a^(8+4+1))

(2)在书上看到求一个字符串里面pat的个数(被隔开也没事,只要顺序是这个顺序就行):先找到一个a ,然后用a左边p的个数*a右边t的个数然后再加上后面的a(也是这样求)。!!!简直太聪明了!!我根本想不到这种方法!!! 这么简单的一个小方法我是真的怎么也想不到,这方法简直太聪明了!!我忍不住不佩服!虽然就是很简单的一个小题。

(3)vector类型的数组

v1=v2即可将v2全部赋值到v1(算法笔记上看到一个题里面用的才知道的,然后后面的是通过搜索了解到的),或者是在定义时vector<int> v1(v2);交换两数组内容:v1.swap(v2);

(4)遇到和矩阵相关的问题,一定要判断数组是否越界!需要访问a[x][y]周边的不止一个元素时,先建立好x[]和y[]数组,x[i]和y[i]相互对应,然后用循环让a的横纵坐标同时加减x[i]y[i]就能访问到一个元素周边的元素了

(搜索看的还不多还没有研究透,qwq下周再继续搜索)

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值