本文主要是介绍C语言每日一题(63)复写零,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目链接
力扣网 1089 复写零
题目描述
给你一个长度固定的整数数组 arr
,请你将该数组中出现的每个零都复写一遍,并将其余的元素向右平移。
注意:请不要在超过该数组长度的位置写入元素。请对输入的数组 就地 进行上述修改,不要从函数返回任何东西。
示例 1:
输入:arr = [1,0,2,3,0,4,5,0] 输出:[1,0,0,2,3,0,0,4] 解释:调用函数后,输入的数组将被修改为:[1,0,0,2,3,0,0,4]
示例 2:
输入:arr = [1,2,3] 输出:[1,2,3] 解释:调用函数后,输入的数组将被修改为:[1,2,3]
提示:
1 <= arr.length <= 104
0 <= arr[i] <= 9
思路分析
知识点:双指针
解析:
思路1
按照题目要求直接实现,定义两个指针cur和dest,两个指针从零开始,cur用来扫描整个数组。
1.当arr【cur】等于0时,将dest指针移动到cur位置,然后cur加一,从cur位置开始到整个数组结束,元素整体向右移动,最后在cur位置加个0即可。
2.当arr【cur】不等于0时,cur往下走,dest不动。
void duplicateZeros(int* arr, int arrSize) {int cur=0;int dest=0;while(cur<arrSize){if(arr[cur]==0){int end=arrSize-1;dest=cur;while(end>dest){arr[end]=arr[end-1];end--;}arr[cur++]=0;}cur++;}}
这篇关于C语言每日一题(63)复写零的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!