数组移位

昨天今日头条笔试,发现好简单,一写出了几个问题,回来才想出来。

一个长度不超过10000的整数数组,里面有若干个0,请事先一段代码,将数组中值为0的元素移动到数组的最前面,其余元素相对位置保持不变。

#include <iostream>
#include <vector>

using namespace std;

// 此处忘记引用了
void moveZero(vector<int> &in){
    int cnt = 0;
    for (int i = in.size() - 1; i >= 0; i--){
        if (in[i] == 0) {
            cnt++;
        }
        // 此处下标搞错了
        else {
            in[i + cnt] = in[i];
        }
    }
    for (int i = 0; i < cnt; i++){
        in[i] = 0;
    }
}

int main()
{
    int a[] = { 1, 2, 0, 0, 3, 0, 0, 4, 0, 5, 1, 0, 6, 7 };
    vector<int> ivector(a, a + sizeof(a)/sizeof(int));
    moveZero(ivector);
    for (auto item:ivector)
    {
        cout << item << ‘\0‘;
    }
    return 0;
}
时间: 2024-08-28 19:25:13

数组移位的相关文章

[读书笔记·编程珠玑] 数组移位(待填坑)

要求:已知一个一维数组 arr ,现在要求将它向左旋转n个位置. 方法一: 假设允许开辟一个临时空间,那么问题就变得简单了,可以开辟一个跟arr长度相同的空间,然后隔n个位置不断添加元素即可,思路比较简单,下面是代码实现: void RotateLeft1(vector<int> &arr, const int step) { vector<int> ret; int sz = arr.size(); ret.resize(sz); for (int i = 0; i &l

lintcode 容易题:Remove Element 删除元素

题目: 删除元素 给定一个数组和一个值,在原地删除与值相同的数字,返回新数组的长度. 元素的顺序可以改变,并且对新的数组不会有影响.  样例 给出一个数组 [0,4,4,0,0,2,4,4],和值 4 返回 4 并且4个元素的新数组为[0,0,0,2] 解题: Java程序: public class Solution { /** *@param A: A list of integers *@param elem: An integer *@return: The new length aft

几种基础排序算法的实现(Java C++)

最近在复习数据结构/算法,准备把以前的基础知识都实现一边,过一过.也写写我人生中的第一篇技术博文-只求自己能把学过的东西梳理一便,加深记忆. 一.插入排序. 设计思想:从数组的第二个元素开始循环,并将此元素设为key(通俗的理解就是数组中正在为它排序的元素),再把此元素与之前的所有已经排好序的元素进行比较,找到合适的位置后,继续循环,直到数组中的最后一个元素为止. (C++) 1 void insertSort(int *array, int length) { 2 for (int i = 1

2016华为上机题一(循环移位)

1.循环数组移位 输入10个整整数的数组,在输入一个正整数m,将数组的后m位进行循环移位.计算移位后的前m个数和后m个数的和. 1 2 3 4 5 6 7 8 9 10 3 8 9 10 1 2 3 4 5 6 7 27 18 1 #include <iostream> 2 #include <stdio.h> 3 #include <cmath> 4 #include <string> 5 #include <algorithm> 6 #inc

jdk 1.7 ArrayList 源码分析

1.首先看看ArrayList 的基类有哪些 public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable 可以总结为: ArrayList 继承了AbstractList 实现了 List . RondomAcess . cloneable . serializable 对于一般的容器都会实现clon

Zedboard OLED 小演示

玩Zedboard上自带的OLED,网上一位博主对这颗OLED做了比较底层的分析和开发.http://blog.chinaaet.com/detail/30962 .程序和硬件构思基本移植了在单片机开发上的经验.大致的想法是用PL部分搭建OLED控制和通讯的SPI协议,再通过PS控制发送OLED需要显示的信息.有兴趣可以展开看一下.不过Diligent为OLED已经制作好了驱动,正如我们在用SD卡启动时看到的Diligent的logo.我们可以基于此做一些简单的演示开发.这里借助img2lcd工

具体数学斯特林数-----致敬Kunth

注意这里讲的是斯特林数而非斯特林公式. 斯特林数分两类:第一类斯特林数 和 第二类斯特林数. 分别记为. 首先描述第二类斯特林数. 描述为:将一个有n件物品的集合划分成k个非空子集的方法数. 比如集合{1,2,3,4}有以下划分: {1,2,3}U{4}   {1,2,4}U{3}   {1,3,4}U{2}   {2,3,4}U{1}  {1,2}U{3,4}   {1,3}U{2,4}  {1,4}U{2,3}. 7个这样的划分. 记为. 那么有一下第二类斯特林数交给你计算. 根据定义,易得

一道关于排序的面试题

以前群里有个同事发了道面试题: 两个已排好序数组,A和B,现要求对他们重新联合排序,合以的小数放入A数组中,大的数放入B中. 这题的关键是两个数组已经排好序,如果按传统的方法,进行排序当然没问题,但就没有充分利用现有的条件. 或许你可以想到插入排序,这样就可以利用a数组已排好序的优势对其进行排序了.但传统的插入排序确没有考虑到B数组也已排好序,我试过用插入序序的方式解决这个问题,但在连写了两个if,else之后,我放弃了.(我最讨厌写if,else,而且我也意识到插入排序不能很好地利用现有条件)

X264源代码分析——总纲入门最佳

http://www.cnblogs.com/xkfz007/articles/2616133.html l       相关说明: 1.     使用版本: x264-cvs-2004-05-11 2.     这次的分析基本上已经将代码中最难理解的部分做了阐释,对代码的主线也做了剖析,如果这个主线理解了,就容易设置几个区间,进行分工阅读,将各个区间击破了. 3.     需要学习的知识: a)       编码器的工作流程. b)      H.264的码流结构,像x264_sps_t,x2