本文主要是介绍“一万年太久,只争朝夕”,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
数组方法总结
最近刷了一些有关数组的题目,觉得有必要对数组进行归纳总结。其实所有的数组题目本质是考察对数组增删查改的熟练度。
数组增加元素的方法动态开辟一个新数组,找到插入元素的位置下标,然后将后面元素的下标都加一位,最后在将这个元素放进来。
例如合并两个有序数组中,将第二个数组中的元素插入到第一个数组中去。采用了双指针法,一个遍历数组nums1,一个遍历nums2数组,由于合并后的数组要求是升序的,所以这两个指针是从后往前遍历。
数组删除元素的方法有两个,第一个是开辟一个新数组,遍历数组,把符合要求的元素保存到新数组中。。第二个方法是在原数组移除元素,不开辟额外空间,采用的思路是双指针法。
例如移除元素这个题目中,定义两个指针s1和s2,s1是用数组下标来访问数组内容,s2用来找要删除的值,如果等于就跳过,反之把它赋值给s1,然后s1和s2同时往后走一个单位。直到s2遍历完整个数组。
又比如删除有序数组的重复项中定义了双指针dst和src,src用来找不同项,dst用来存储不同项的元素。如果nums[src] ==nums[src - 1],src就往后走,反之就将nums[src - 1]的值赋给下标为dst的元素,然后dst和src均向后走1个单位,直至src遍历完数组。
数组查找元素的方法根据你要查找的元素不同,会有不同的方法,但最基本的还是暴力求解法。
例如查找消失的数字中采用了 ^ 的方法,即遍历数组的元素把他们全部^起来,然后再遍历 ^ 1到n个数字,最后全部 ^。
比如查找数组中至少是其他数字两倍的最大数需要找到最大的元素和第2个最大的元素。然后进行比较。
比如查找多数元素采用的方法是投票法。
例如查找除自身以外数组的乘积采用的是前缀后缀法。即分别累积前缀的乘积和后缀的乘积。
又比如查找找到所有数组中消失的数字中采用哈希表,把nums[i]作为下标,记录出现元素,最后将额外空间和输出空间合并为一个空间,既做输出又做记录。
修改数组的例子比如轮转数组,典型做法是三段逆置法。
总之做题时先分析题目的要求,往相似的思路上靠拢,无非就这四种类型,确实有不会的或者新颖思路的再记录下来就好了。
这篇关于“一万年太久,只争朝夕”的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!