您的位置:首页 > 其它

LeetCode---1.ArrayEasy

2016-07-13 21:35 330 查看
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]来直接对数量进行记录
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: