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]来直接对数量进行记录
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]来直接对数量进行记录
相关文章推荐
- Spring Mvc那点事---(29)Spring Mvc基于ProxyFactoryBean的传统AOP使用正则拦截
- Android头部视差效果的实现方式
- python打印列表中指定元素的所有下标(5种方法)
- ubuntu报错:No such file or directory
- android的帧动画和补间动画总结
- 从沈阳超市的购物车谈起
- WebP的工作原理
- GPUView、WDDM资源链接
- RecyclerView学习
- 京东商城导航logo---用js
- 1002. A+B for Polynomials (25)
- 下面关于编译系统和解释系统的观点中,错误的是
- 超好用的plsql设置
- Java 入门 多线程 之 有返回值的线程(一)
- 京东商城导航logo---用css
- Web服务器部署02: Apache + PHP + Oracle
- EventBus3 简单使用及注意点
- ZooKeeper基本原理
- HTML颜色
- Codeforces 543D Road Improvement