首页 > 其他分享 >有序数组的平方

有序数组的平方

时间:2023-04-17 23:15:10浏览次数:40  
标签:平方 数组 temp nums int List 有序 new

有序数组的平方

给你一个按非递减顺序排序的整数数组nums,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。

示例 1:

输入:nums = [-4,-1,0,3,10]
输出:[0,1,9,16,100]
解释:平方后,数组变为 [16,1,0,9,100]
排序后,数组变为 [0,1,9,16,100]

Python

解一:

class Solution(object):
    def sortedSquares(self, nums):
        """
        :type nums: List[int]
        :rtype: List[int]
        """
        nums_new = []
        for i in nums:
            nums_new.append(i*i)
        nums_new.sort()
        return nums_new

解二:

class Solution(object):
    def sortedSquares(self, nums):
        """
        :type nums: List[int]
        :rtype: List[int]
        """
        flag = 0
        nums_new = []
        for i in nums:
            temp = i*i
            if nums_new == []:
                nums_new.append(temp)
            else:
                for i in nums_new:
                    if i >= temp:
                        nums_new.insert(nums_new.index(i),temp)
                        flag = 1
                        break
                if flag == 0:
                    nums_new.append(temp)
                flag = 0
        return nums_new

解三:

class Solution(object):
    def sortedSquares(self, nums):
        """
        :type nums: List[int]
        :rtype: List[int]
        """
        result = []
        i = 0
        j = len(nums)-1
        while i <= j:
            if nums[i]*nums[i] < nums[j]*nums[j]:
                result.insert(0,nums[j]*nums[j])
                j -= 1
            else:
                result.insert(0,nums[i]*nums[i])
                i += 1
        return result

笔记

  1. 解法一,先得到列表内所有元素平方之后再对其进行排序,解法二,在得到列表内每个元素的平方之后,利用直接插入排序的思路对其进行排序,最后得到已经排序的平方列表;但这两种方法时间复杂度都较高。
  2. 根据题意可知,原列表内元素平方后得到的新列表中,并不是没有顺序,只是最小值在中间(原列表有负数时),最大值在两端而已,因此可以用两个指针分别指向首段和尾端,根据$(nums[i]){2}$和$(nums[j])$的大小判断将哪一端先放入结果中,放入结果的端点的指针需要移动。此外需要注意循环的条件,首端指针i,末端指针j,其判断条件应为i <= j,否则会出现在最后有一个指针指向元素的平方未放入结果列表的情况。

标签:平方,数组,temp,nums,int,List,有序,new
From: https://www.cnblogs.com/zhiyue-bit/p/17327895.html

相关文章

  • 长度最小的子数组
    长度最小的子数组给定一个含有n个正整数的数组和一个正整数target。找出该数组中满足其和≥target的长度最小的连续子数组[numsl,numsl+1,...,numsr-1,numsr],并返回其长度。如果不存在符合条件的子数组,返回0。示例1:输入:target=7,nums=[2,3,1,2,4,3]......
  • 【LBLD】常数时间删除-查找数组中的任意元素
    常数时间删除-查找数组中的任意元素380.O(1)时间插入、删除和获取随机元素classRandomizedSet{private:vector<int>nums;unordered_map<int,int>num2index;public:RandomizedSet(){srand(time(0));}boolinsert(intval){......
  • 轮换数组——给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数
    示例输入:nums=[1,2,3,4,5,6,7],k=3输出:[5,6,7,1,2,3,4]解释:向右轮转1步:[7,1,2,3,4,5,6]向右轮转2步:[6,7,1,2,3,4,5]向右轮转3步:[5,6,7,1,2,3,4]这里使用reverse函数来解决问题,思路是:1.反转整个字符串2.反转区间为前k的子串3.反转区间为k到末尾的......
  • 定义函数数组
    interfaceFunctionArrayInterface//定义接口,希望批量执行的函数用统一的名称定义在接口内{voidrunit();}classfuncAimplementsFunctionArrayInterface//函数A{publicvoidrunit(){System.out.println("你运行了函数func......
  • 第五章 数组
    5.1数组的概述5.1.1数组的定义数组是相同类型数据的有序集合。数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。其中,每一个数据称为一个数据元素,每一个数据元素可以通过一个下标来访问他们。5.2数组的声明创建5.2.1数组的声明与创建首先必......
  • reduce 构建新对象或者 数组
    //原对象constinfo=[{name:"A",value:4,},{name:"B",value:7,},{name:"C",value:10,}];//期望对象{A:4,B:7,C:10,}//reduce:co......
  • C# 数组深拷贝浅拷贝
    1bool[]tmp1={true,true};2bool[]tmp2;34//tmp2=tmp1;//浅拷贝更改tmp2会影响tmp156tmp2=(bool[])tmp1.Clone();//克隆深拷贝更改tmp2不会影响tmp178tmp2[0]=false;9......
  • 动态规划:剑指 Offer 42. 连续子数组的最大和
    题目描述:输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。 提示:1<= arr.length<=10^5-100<=arr[i]<=100   classSolution{publicintmaxSubArray(intnums[]){intres......
  • 远程的文件转换成byte数组
    1、使用OkHttp3库来将远程的GIF文件转换成InputStreamOkHttpClientclient=newOkHttpClient();Requestrequest=newRequest.Builder().url("http://xxxxx/resources/upload/20230414/3_yk_anim_cn_64_1.gif").build();......
  • es6 数组对象求和
    letlist=[{id:1,price:2},{id:2,price:4},{id:3,price:6},{id:4,price:8},];letres=list.reduce((sumData,key,index,arrData)=>{console.log('a',sumData);//上⼀次调⽤回调时返回的累积值c......