import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param cows int整型一维数组
     * @return int整型一维数组
     */
    public int[] sortCows (int[] cows) {
        // write code here
        int start = 0;
        int end = cows.length - 1;
        while (start<end){
            while (start<cows.length && cows[start]==0){
                start++;
            }
            while (end>=0 && cows[end]==1){
                end--;
            }
            if(start==cows.length||end==-1){
                break;
            }
            swap(start,end,cows);
            start++;
            end--;
        }
        return cows;
    }

    public void swap(int a, int b, int[] arr) {
        int c = arr[a];
        arr[a] = arr[b];
        arr[b] = c;
    }

}

本题考察的知识点是数组,所用编程语言是java。

我采用双指针来解决此题,一个指针从数组起点开始也就是首指针,一个指针从数组终端开始往数组起点前进也就是尾指针。

首指针如果cows[i]等于0,继续前进,尾指针如果cows[i]=1,继续往首端位置前进。如果两者都不前进则进行数组元素交换