array easy summery

来源:互联网 发布:网络拾音头 编辑:程序博客网 时间:2024/06/10 04:54

array(easy) summary

1、其中关于计算数组中两个数字的和LeetCode1. Two Sum还是看一个string中有没有重复,都是用map<int,int>index或者map<char,int>index.将原来的值作为键值,将下标作为值(LeetCode1.Two Sum),或者用index[nums[i]]++进行计数()

            for(inti=0;i<nums.size();i++)

                            {index[nums[i]]=i}        

2LeetCode26Remove Duplicates from Sorted ArrayLeetCode27Remove Duplicates from Sorted Array都是移动问题,此类问题就是添加一个哨兵,然后根据题目要求对于哨兵的位置进行操作。(需要注意的是这里是要替代原有位置,不能仅仅是删除重复)而且不是重复或要求元素时正常移动i,遇到重复或要求元素,对pos进行操作。

3leetcode35 Search Insert Position这种插入,查找的题目都是用二分法。

3leetcode53Maximum Subarray方法一:(动态规划)遍历查找每段的最大sum。如果当前段的sum已经小于0,则重新开启一段。 注意把max设为第一个值。方法二:(分治法)

 

4LeetCode66PlusOne 关于数的加减法  都是要进行每一位剩下的数和进位的数不断地向前循环。

5LeetCode88 Merge Sorted Array采用后项插入

6LeetCode118Pascal'sTriangleLeetCode118Pascal's Triangle2都是找规律计算问题,LeetCode118Pascal's Triangle2注意有些声明和初始化是应该在循环内还是在循环外。

7121.Best Time to Buy and Sell Stock其实是在已经便利过的前面找最小的,这时可以一边遍历,一边更新最小值. 122. Best Time to Buy and Sell Stock 2采用的是取巧计算的方法。

8167.Two Sum II - Input array is sorted用的是双指针问题,通过判断来不断地调整指针。

9169.Majority ElementLeetCode1.Two Sum中的是一个类型的(map计数)。
10
189. Rotate Array数组翻转注意reverse里的startend.因为在rotate里要使用翻转的开始和结束的位置。

11217.Contains DuplicateLeetCode1.Two Sum中的是一个类型的(map计数)。

12219. Contains Duplicate II 这个题要注意就是index[nums[i]]=i;是记录了重复数字第一次最新的在数组里的位置。当if(index.find(nums[i])!=index.end()&&(i-index[nums[i]])<=k)第二次在发发现,当前位置i和第一次最新的在数组里的位置的差就是他们之间的间隔。

13283. Move ZeroesLeetCode26中的是一个类型的。(哨兵问题)

14414. Third Maximum Number两种方法,第一种,三个数,不断更新初始化要用长整型long的最小值,否则当数组中有INT_MIN存在时,程序就不知道该返回INT_MIN还是最大值first第二种set里只有三个数不断更新。

时间复杂度是O(nlogn),不符合题目要求,纯粹是拓宽下思路哈,利用了set的自动排序和自动去重复项的特性,很好的解决了问题,对于遍历到的数字,加入set中,重复项就自动去掉了,如果此时set大小大于3个了,那么我们把set的第一个元素去掉,也就是将第四大的数字去掉,那么就可以看出set始终维护的是最大的三个不同的数字,最后遍历结束后,我们看set的大小是否为3,是的话就返回首元素,不是的话就返回尾元素

其实求前n大数 最好的方法是快速排序。

15448. Find All NumbersDisappeared in an Array注意数组中元素和下标的对应关系。利用数组中存在的元素的值作为下标,将此下标的元素变为负数,如果元素没有出现,那么他的下标所对应的的数值就不为0,这就是失踪的元素。

16485. Max Consecutive Ones最大值的迭代问题。

0 0
原创粉丝点击