一个整型数组,所有的零元素放到最后输出,非零元素顺序不变,怎么做?主要考虑效率 如题 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 package com.xuz.csdn.july07;public class SortByZero { static int[] array = {1,5,7,0,8,2,0,9,0,0,0}; public static void main(String[] args) { for (int i = array.length - 1 ; i > -1 ; i--) { if (array[i] == 0) { for (int j = i; j < array.length - 1; j++) { array[j] = array[j+1]; if (array[j+1] == 0) { break; } if (j+1 == array.length - 1) { array[j+1] = 0; } } } } for (int num : array) { System.out.print(num + " "); } }} 明明很简单的问题 被你们一群"大学生"在这里讨论1+1=? 难道在csdn就非要复杂化? 呵呵 我也觉得应该new一个等长的数组:int[] oldArray = {2,3,0};int[] newArray = new int[oldArray.length];for(int i=0;i<oldArray.length;i++) { if(oldArray[i]!=0) { newArray[i] = oldArray[i]; }}这样就行了。。不用再添加什么0了java中int数组你不添加,他自己就是0 还用添加吗? if oldArray = new int[10000000]; new一个数组你不觉得空间浪费吗!效率低 如果是集合的话List<Integer> list = new ArrayList<Integer>();Collections.sort(list);for (int i = list.size()-1; i >=0; i--) { System.out.println(list.get(i));}先转换为集合? 如果有足够内存,new一个array未尝不是一个办法。这个是典型的空间换时间。算法复杂度最低,效率反而比你在单个数组里腾转挪移快。当然,这个代码有问题,应当i,j两个计数 int ai[] = {5,6,7,0,8,9,0,7}; int count = 0; for (int ae:ai) { if (ae != 0) { System.out.println(ae); } else { count++; } } for (int i = 1; i<=count; i++) { System.out.println("0"); } 我来结贴 import java.util.Random;public class Test { public static void main(String args[]) { int[] array = new int[10000000]; Random rand = new Random(); for (int i = 0; i < 10000000; i++) { array[i] = rand.nextInt(10); } long start = System.currentTimeMillis(); // 我的63ms int index = 0; for (int i = 0; i < array.length; i++) { if (array[i] != 0) { array[index] = array[i]; array[i] = 0; index++; } } /* * 17楼的 跑死机了 for (int i = array.length - 1 ; i > -1 ; i--) { if * (array[i] == 0) { for (int j = i; j < array.length - 1; j++) { * array[j] = array[j+1]; if (array[j+1] == 0) { break; } if (j+1 == * array.length - 1) { array[j+1] = 0; } } } } */ long end = System.currentTimeMillis(); System.out.print(end - start); }} 补一组不随机的看效果 public static void main(String args[]) { int[] array = {0,3,2,9,6,0,0,0,1,5,7}; int index = 0; for (int i = 0; i < array.length; i++) { if (array[i] != 0) { array[index] = array[i]; array[i] = 0; index++; } } for (int i = 0; i < array.length; i++) { System.out.println(array[i]); } }打印:32961570000 没有你们想的这么复杂吧!不用记下零元素所在位置的数组下标吧!是int的数组,是零的元素那就是零咯。 public static void main(String[] args) { int[] array = {0,1,2,3,5,0,2,0,3}; int count=0; for(int x:array){ if(x ==0) count++; else System.out.print(x); } for(int i=0;i<count;i++){ System.out.print(0); } } SSH 拦截器响应但是页面不跳转 关于ocx视频 如何显示在jsp上 真心求帮助 在线 谢谢了 dynavalidatorform验证无效的原因!! Servlet运行时的基本原理 jbpm中dom4j解析xml问题(棘手,望大家指点) session共享问题 求救:struts2.0 验证没通过,返回后页面数据丢失,怎么解决 想学j2ee不知道都要安装什么? 怎么将这条sql语句转换成hql呀? eclipselink问题:ERROR 23505 ssh登录存放用户发布信息 不成功 大家帮我看看这个异常吧 谢谢 求助!菜鸟Struts2问题
public static void main(String[] args) {
for (int i = array.length - 1 ; i > -1 ; i--) {
if (array[i] == 0) {
for (int j = i; j < array.length - 1; j++) {
array[j] = array[j+1];
if (array[j+1] == 0) {
break;
}
if (j+1 == array.length - 1) {
array[j+1] = 0;
}
}
}
}
for (int num : array) {
System.out.print(num + " ");
}
}}
int[] newArray = new int[oldArray.length];
for(int i=0;i<oldArray.length;i++) {
if(oldArray[i]!=0) {
newArray[i] = oldArray[i];
}
}这样就行了。。不用再添加什么0了
java中int数组你不添加,他自己就是0
还用添加吗?
if oldArray = new int[10000000];
Collections.sort(list);
for (int i = list.size()-1; i >=0; i--) {
System.out.println(list.get(i));
}
先转换为集合?
如果有足够内存,new一个array未尝不是一个办法。这个是典型的空间换时间。算法复杂度最低,效率反而比你在单个数组里腾转挪移快。当然,这个代码有问题,应当i,j两个计数
int count = 0;
for (int ae:ai) {
if (ae != 0) {
System.out.println(ae);
} else {
count++;
}
}
for (int i = 1; i<=count; i++) {
System.out.println("0");
}
import java.util.Random;public class Test { public static void main(String args[]) {
int[] array = new int[10000000];
Random rand = new Random();
for (int i = 0; i < 10000000; i++) {
array[i] = rand.nextInt(10);
}
long start = System.currentTimeMillis();
// 我的63ms
int index = 0;
for (int i = 0; i < array.length; i++) {
if (array[i] != 0) {
array[index] = array[i];
array[i] = 0;
index++;
}
} /*
* 17楼的 跑死机了 for (int i = array.length - 1 ; i > -1 ; i--) { if
* (array[i] == 0) { for (int j = i; j < array.length - 1; j++) {
* array[j] = array[j+1]; if (array[j+1] == 0) { break; } if (j+1 ==
* array.length - 1) { array[j+1] = 0; } } } }
*/
long end = System.currentTimeMillis();
System.out.print(end - start); }
}
public static void main(String args[]) {
int[] array = {0,3,2,9,6,0,0,0,1,5,7}; int index = 0;
for (int i = 0; i < array.length; i++) {
if (array[i] != 0) {
array[index] = array[i];
array[i] = 0;
index++;
}
}
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
}
打印:
3
2
9
6
1
5
7
0
0
0
0
是int的数组,是零的元素那就是零咯。 public static void main(String[] args)
{
int[] array = {0,1,2,3,5,0,2,0,3};
int count=0;
for(int x:array){
if(x ==0)
count++;
else
System.out.print(x);
}
for(int i=0;i<count;i++){
System.out.print(0);
}
}