1.直接插入思想

数组刷题近期总结_刷题

low的写法:

SqList Delete_same(SqList l){
    int k=0;//k为重复元素的总个数,例如:{1,1,2,2,2}中k=3
    for(int i=1;i<l.length;i++){
        if(l.data[i]==l.data[i-1])
            k++;
        l.data[i-k]=l.data[i];
    }
    l.length-=k;
    return l;
}

high:(直接插入思想)

数组刷题近期总结_刷题_02

2.归并思想

归并排序:

public class MergeSort implements IArraySort {

    @Override
    public int[] sort(int[] sourceArray) throws Exception {
        // 对 arr 进行拷贝,不改变参数内容
        int[] arr = Arrays.copyOf(sourceArray, sourceArray.length);

        if (arr.length < 2) {
            return arr;
        }
        int middle = (int) Math.floor(arr.length / 2);

        int[] left = Arrays.copyOfRange(arr, 0, middle);
        int[] right = Arrays.copyOfRange(arr, middle, arr.length);

        return merge(sort(left), sort(right));
    }

    protected int[] merge(int[] left, int[] right) {
        int[] result = new int[left.length + right.length];
        int i = 0;
        while (left.length > 0 && right.length > 0) {
            if (left[0] <= right[0]) {
                result[i++] = left[0];
                left = Arrays.copyOfRange(left, 1, left.length);
            } else {
                result[i++] = right[0];
                right = Arrays.copyOfRange(right, 1, right.length);
            }
        }

        while (left.length > 0) {
            result[i++] = left[0];
            left = Arrays.copyOfRange(left, 1, left.length);
        }

        while (right.length > 0) {
            result[i++] = right[0];
            right = Arrays.copyOfRange(right, 1, right.length);
        }

        return result;
    }

}

3.reverse函数(组合使用)

用途:数组内元素互换,循环左右移p个位置

数组刷题近期总结_刷题_03

void reverse(int R[],int from,int to){
    int i,temp;
    for(i=0;i<(to-from+1)/2;i++){
        temp=R[from+i];R[from+i]=R[to-i];R[to-i]=temp;
    }
}
void converse(int R[],int n,int p){
    reverse(R,0,p-1);
    reverse(R,p,n-1);
    reverse(R,0,n-1);
}

10题另解

数组刷题近期总结_刷题_04

void move(int a[],int n,int p){
    int j=0;
    for(int i=0;i<p;i++) b[i]=a[i];
    for(int i=p;i<n;i++) a[i-p]=a[i];
    for(int i=n-p;i<n;i++) a[i]=b[j++];
}