zoukankan      html  css  js  c++  java
  • 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;
        }

    持序更新中。。。

    
    
  • 相关阅读:
    前端基础学习分享
    IOS中block和代理
    最近一个项目的反思
    Coreseek Windows下安装调试
    iOS对象属性详解
    我眼里“维多利亚的秘密”中最性感的营销三点式
    用CSS制作带图标的按钮
    简单权限管理设计
    CentOS工作内容(三)配置网络IP地址
    CentOS工作内容(二)关闭SELinux
  • 原文地址:https://www.cnblogs.com/sengzhao666/p/13828371.html
Copyright © 2011-2022 走看看