题目:有序数组的平方
题干:给定一个按非递减顺序排序的整数数组 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; }
持序更新中。。。