每日一道编程题(1):前正后负

(2018吉林大学941)

一个长度为 n 的数组由负数、0、正数组成。编写函数,将其重新排序为前段都是负数,后段均为非负数的结构。要求时间复杂度为 O(n)。 大酱妹子的解答:时间复杂度O(n),空间复杂度O(n)。

算法解析:

  • 1.算法分析:
    每日一道编程题(1):前正后负_第1张图片
  • 2.Java代码:
import java.lang.reflect.Array;
import java.util.Arrays;

public class DP01 {
	
	public static void main(String[] args) {
		int[] a= {1,0,-8,6,-4,9,7,-2,0,12,-3,-8,5,14,21,-14,-7,19};
		int len=a.length;
		int aLen=len;
		int[] b=new int[len];
		for(int i=0,j=0;i<a.length;i++) {
			if(a[i]>0) {
				b[len-1]=a[i];
				len--;
			}else if(a[i]<0) {
				b[j]=a[i];
				j++;
			}
			if(j+len==aLen) {
				b[j]=a[i];
			}
			
		}
		
		System.out.println(Arrays.toString(b));
	}

}
  • 3.C++代码:

每日一道编程题(1):前正后负_第2张图片

你可能感兴趣的:(编程语言)