leetcode-数组排序

题目:有序数组的平方

题干:给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。

示例 :

输入:[-4,-1,0,3,10]

输出:[0,1,9,16,100]

心得体会:通过本题,将数组排序方法整理一遍

首先使用暴力解决方案,用到栈与队列:

public static int[] sortedSquares1(int[] A) {
        Stack<Integer> stack = new Stack<>();
        LinkedList<Integer> linkedList = new LinkedList<>();
        int[] ret=new int[A.length];
        for (int i=0;i<A.length;i++) {
            if(A[i]<0){
                stack.push(A[i]*A[i]);
            }else {
                linkedList.offer(A[i]*A[i]);
            }
        }
        for(int i=0;i<A.length;i++){
            if (!stack.empty()) {//栈不为空
                if(!linkedList.isEmpty()) {
                    int peek = stack.peek();
                    int element = linkedList.element();
                    if (peek < element) {
                        ret[i] = peek;
                        stack.pop();
                    } else {
                        ret[i] = element;
                        linkedList.poll();
                    }
                }else {//队为空
                    ret[i] = stack.pop();
                }
            }else if(!linkedList.isEmpty()){//栈为空,队不为空
                    ret[i]=linkedList.poll();
            }

        }
        return ret;
    }

为了方便,以下的排序方法,仅传入一数组(及将原题平方后的数组传入)进行排序:

插入排序---直接插入排序:

public static int[] InsertSort(int[] nums) {
        int flag;//flag 监视哨:用来储存待插入的数据
        int t=-1;//记录待插入位置的角标
        for(int i=1;i<nums.length;i++){
            if(nums[i]<nums[i-1]){
                flag=nums[i];//待插入数据储存在监视哨中
                nums[i]=nums[i-1];//nums[i-1]后移
                if(i<2){//排除j=i-2<0,防止数组报错溢出
                    nums[i-1]=flag;
                }
                for(int j=i-2;j>-2;j--){//从后向前查找插入位置
                    if(j>-1){
                        if (flag<nums[j]) {//待插入数据比nums[j]小
                            nums[j+1]=nums[j];//后移
                        }else{
                            t=j+1;
                            break;
                        }
                    }else{
                        t=j+1;
                        break;
                    }
                }
                if(t!=-1){//将监视哨中的数据插入
                    nums[t]=flag;
                }
            }
        }
        return nums;
    }

持序更新中。。。


原文地址:https://www.cnblogs.com/sengzhao666/p/13828371.html