今天开始系统学习算法,虽然我已经修过了数据结构和算法设计与分析,但是我认为我代码敲的还不够,从今天开始我会从数组链表起头,开始系统的学习锻炼算法思维!
今天的题目:移动0
题目描述:给定一个数组 nums
,编写一个函数将所有 0
移动到数组的末尾,同时保持非零元素的相对顺序。
先记录我的傻瓜解法,以及其遇到的问题,我首先的想法是遍历数组,扫描到一个0就把后面的数据全部前移移位,覆盖掉这个0,然后数组最后一位赋值为0,但是遇到了错误,人工debug没有找到,通过编译器找出来了,还是自己代码敲少了,不够熟练;
问题及解释:之所以要i--,是因为下一个数据前移到本位了,但是如果在末尾好几个0的情况下,就会陷入死循环。
改良后:
上面代码解释:通过sum来求和此0后面的数,判断后面是否全部为0,以此来判断是否i--,题目能解出来并且全部通过,但是效率则低的可怜。
看了评论之后,我看到了一个我认为最优的解法:先把所有非0的数放到数组前面,然后此后的数全部赋值为0。