热门

最新

红包

立Flag

投票

同城

我的

发布
qq_21891743
黑夜开发者
3 年前
trueqq_21891743

太厉害了,转发祝贺

@遇事问春风乄:第一次上热榜和入选,
感谢大家的支持。
我会继续加油把更好的文章带给大家的!!!🌸

…全文
CSDN App 扫码分享
分享
评论
点赞
打赏
  • 复制链接
  • 举报
下一条:
每日一题leetcode1089—复写零给你一个长度固定的整数数组 `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]解法一:双指针先找到最后一个需要写进数组的元素,然后从后往前按照条件写,注意处理特殊情况——越界时间复杂度:O(n)空间复杂度:O(1) void duplicateZeros(vector<int>& arr) { //1.查找最后一个写的元素 int cur = -1, dest = -1; int sz = arr.size(); while (cur < sz) { if (arr[++cur]) dest++; else dest += 2; if(dest >= sz - 1) break; } //2.处理特殊情况——dest越界 if (dest == sz) { arr[--dest] = 0; cur--; dest--; } //3.从后往前复写 while (cur >= 0) { if(arr[cur]) arr[dest--] = arr[cur--]; else { arr[dest--] = 0; arr[dest--] = 0; cur--; } } }
立即登录