将一个数组的非零元素移动到数组的前面,零元素置于数组的后面
来源:互联网 发布:秋天 连衣裙 搭配 知乎 编辑:程序博客网 时间:2024/05/21 09:22
<span style="font-size:18px;">题目:将一个数组中的所有非零元素移动到数组的前面,零元素移动到数组的后面,同时返回新数组中第一个0元素 的下标,要求不能改变数组中非零元素的顺序。比如 : arr[10] = {1,3,0,2,0,0,8,0,4}; 移动之后为: arr[] = {1,3,2,8,4,0,0,0,0}</span></p>方法一,利用两个循环,外层循环找到一个0元素,内层循环找到一个非0元素,然后交换位置,思路非常简单,但是代码写起来比较麻烦!!1 #include<iostream> 2 using namespace std; 3 int main() 4 { 5 int array[10] = {2,5,0,1,0,0,8,4}; 6 int count = 0; 7 for(int i = 0;i < 10;i++) 8 { 9 // 通过从前往后的遍历找到一个0元素 10 if(array[i] == 0) 11 { 12 for(int j = i;j < 10; j++) 13 { 14 // 从前往后遍历找到一个非0元素,然后交换 15 if(array[j] != 0) 16 { 17 array[i] = array[j]; 18 array[j] = 0; 19 count++; 20 break; 21 } 22 } 23 } 24 } 25 26 //输出数组中的元素 27 for(int i = 0;i < 10;i++) 28 { 29 cout << array[i]; 30 } 31 cout << endl; 32 // 输出新数组中第一个0元素的下标 33 cout << count+1 << endl; 34 return 0; 35 }
方法二、类似于冒泡的算法,遇到一个0元素,则和后面的元素交换,这样一趟下来都会有一个0元素被放到最尾端,而一共需要10趟,当然了还有类似与插入排序的算法等,鉴于时间的关系,暂时不写了。
1 #include<iostream>
2 using namespace std;
3 int main()
4 {
5 int array[10] = {1,0,4,2,0,0,8,5,0};
6 for(int j = 0; j < 10;j++){
7 for(int i = 0;i < 9; i++)
8 {
9 if(array[i] == 0)
10 {
11 int temp = array[i];
12 array[i] = array[i+1];
13 array[i+1] = temp;
14 }
15 }
16 }
17 for(int i = 0;i < 10;i++)
18 {
19 cout << array[i];
20 }
21 cout << endl;
22 }
~
0 0
- 将一个数组的非零元素移动到数组的前面,零元素置于数组的后面
- 将数组非零元素依次移动到数组前端
- 给定一个数组nums,写一个函数将所有的值移动0到最后,同时保持非零元素的相对顺序不变
- 将数组中指定数量的元素移动数组后面
- 20100127_1 设一维数组V中存有N个整数,试写一个算法,将其中的非零元素移到数组的前面来,连续存放,相对位置不变。
- 一个整数数组,用后面的元素减去前面的元素,求最大值。
- 删除数组零元素
- 删除数组零元素
- 删除数组零元素
- 删除数组零元素
- 删除数组零元素
- 删除数组零元素
- 删除数组零元素
- 删除数组零元素
- 删除数组零元素
- 删除数组零元素
- 删除数组零元素
- 删除数组零元素
- log4j 详细使用
- 温故-C++ PRIMER 2014-11-23
- 如何把引用的jar包和本项目一起导出成jar文件
- sqlite中文排序相关
- Oracle之Check约束实例详解
- 将一个数组的非零元素移动到数组的前面,零元素置于数组的后面
- js如何判断用户是否是用微信浏览器
- yii 构建search 数据源data
- 捉虫经历
- php 时间戳
- jsp 乱码
- 栈和队列的基本操作实现
- 如何发表高水平论文(转载)
- 【网络流】 POJ 3422 Kaka's Matrix Travels