LeetCode---1.ArrayEasy

1.题目思路


1. 1.Two Sum

关键词:hashMap

思路:采用哈希表,将值作为key,将下标作为value,

这样可以使用值的一些运算后在加去作为key查询。


2. 26.Remove Duplicates from Sorted Array

关键词:下标移动
思路:采用一个下标,然后遍历数组,每出现一个不同的,就移动计数下标,并且存入。
STL:本题,很容易使用distance和unique求得,但是效率并不如直接使用下标。


3. 27.Remove Element

关键词:下标移动
思路:这个题完全类似于26题
STL:使用distance和remove


4. 66.Plus One

关键词:对于大数加法的实现
思路:①加上某一位②取得进位③取得余数留在该位④递归到第一位⑤判断进位进行插入


5. 88.Merge Sorted Array

关键词:从后面开始放
思路:这个题计算好空间,从后面开始安放。
最后确认一下,如果b没有放完,再讲b剩下的,统一移到a。


6. 118.Pascal's Triangle

关键词:下一列由前一列计算出
思路:下一列由前一列计算出,并设置好首项和末项。


7. 119.Pascal's Triangle II

关键词:由上一列计算下一列
思路:这个利用固定的一个vector就可以实现,计算下一行的时候,利用上一行。
从后往前计算,这样就不会将后面需要用到的覆盖。最后再push_back(1)即可。


8. 121. Best Time to Buy and Sell Stock

关键词:贪心算法
思路:(1)一直维护,最大差值和最小的元素值,以便后面计算到的最大差值是最大的。

因为采用迭代的计算,所以算出来的差值是后项减前项,是有效的。

(2)我采用了递归的计算方法也能计算出来。①找出最大最小值,如果最大在最小的右边OK。②如果不行,其实2个值就分成了3段,对每段递归。



9. 169. Majority Element
关键词:利用分类
思路:
(1)排个序,下标为N/2的元素肯定是数量超过一半的元素。
(2)将所有元素看做2类,其中一类是数量超过一半的元素,另一类是其他元素。
只需要对其进行计数,每碰到第一类++,每碰到第二类--,最后第一类必然数量>0
一直记录数量>0的元素即可。
(3)采用哈希计数,最后取得计数最多的元素。


10. 189. Rotate Array

关键词:swap
思路:
(1)采用辅助空间,分两段push_back,先push后面的,再从前面push余下的。
(2)冒泡法,一个一个冒,这个超时。
(3)旋转。先逐个旋转,然后,将要移动到前面的旋转,再将余下的旋转。


11. 217. Contains Duplicate
思路:
(1)排序,然后对相邻元素进行大小判断
(2)使用hash_set,然后进行insert操作,对返回值进行判断
(3)使用hash_map,如果find到了就返回结果,如果没有find就放入哈希表


12. 218. Contains Duplicate II
关键词:hashMap
思路:利用哈希表可以记录一些额外的信息用来作判断,
遍历的时候,将值作为key,将下标作为value存放。
每次find,并且判断当前下标和value之差是否小于等于k。


13. 283. Move Zeroes

关键词:下标移动
思路:既然实际填写的比原来的少,就采用count来计数加填数,之前几道题目都遇到过的。


2.题型总结

1.哈希表

题目:1,169,217,218

2.下标移动

题目:26,27,283



3.思考
1.在判断一个容器是否为空的时候,尽量使用x.empty()
而不是x.size() == 0
对于vector这样的顺序容器效率差不多,
但是对于其他容器在有很多个元素的时候,返回size可能消耗很大。


2.carry在加法中有进位的意思


3.unordered_map中,如果使用map[x]那个项,默认初始化为0
所以很多时候可以使用++map[x]来直接对数量进行记录
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值