力扣解题小思-2
又来解力扣的题目了,这次还是选择比较简单的题目入手,这个题目时在双指针的类型里面,虽然不太清楚什么是双指针,希望以后有机会能接触到相关的知识,先来看一看题目是什么。说是要构造一个函数,其作用是将一个数组中为零的元素排到后面,而非零的元素放在最前面,而且非零元素的顺序不能乱。原来我是想用循环的方式,一个个识别数组中的元素,如果识别出来是零之后,就进行换位,但是仔细想了一下,发现实现起来好像有难度,所以后面想了一下,其实可以用另外一个数组,将所有的非零元素放在这个数组里,然后其他的位置就直接用零来填充就行。
所以按照这个思路来试一试,然后先看一下给出的函数条件有哪些,依然是给出了一个函数结构,就是一个框架,函数名以及函数内部的参数情况,如下。
void moveZeroes(int* nums, int numsSize){}
所以同样是需要在这个函数框架里面填充内容,从而满足对应的要求。这里可以看到函数的函数名为moveZeroes,而且没有返回值,再看一下参数部分,这里给出的是数组指针nums以及数组的大小变量numsSize,所以最后改变的是指针指向的数组,于是没有必要输出什么数据。于是在一开始就定义了一个数组a,而且数组的大小是numsSize,并将数组的元素填充为0,之后再通过对原来数组的遍历,将其中非零元素按照原来的顺序放置在新数组中,最后得到的数组再复制到原来的数组中,就完成了。
最后的结果就是顺利通过了,运行的速度是还不错,但是占用内存太多了,这里建议可以用双指针的方法来完成这个实验,也就是不用辅助数组的方式,这样可以通过对原来数组进行换位,这个我倒是没有尝试过,也不太清楚如何操作,可以回头再想想怎么去做。

浙公网安备 33010602011771号