代码训练营day2 | 数组2

文章讨论了在有序数组中计算每个元素平方并保持非递减顺序的方法,包括暴力解法(时间复杂度高),双指针法(适用于有序数组,时间复杂度O(n))和滑动窗口法(用于解决长度最小子数组问题)。同时提到了Python和Java语言的for循环差异。
摘要由CSDN通过智能技术生成
 977.有序数组的平方 

        开始之前先记录一下python和java语法的区别:

for循环

for(int i = 0; i <= len(nums); i++)
    squnums[i] = nums[i]*nums[i]

<====>

python里是这样写的

nums = [1, 2, 3, 4, 5]
squnums = []

for i in range(len(nums)):
    squnums.append(nums[i] * nums[i])

print(squnums)

在这个示例中,我们使用range(len(nums))来生成索引的范围,然后通过nums[i] * nums[i]计算每个元素的平方,并将结果添加到squnums列表中。最后,我们使用print语句来输出squnums列表的内容。注意Python中的列表索引从0开始,所以不需要使用<=,而只需要使用<

ps:python不用申明变量、、、sos这么简单的吗,,好吧!

自己做的暴力解法:(会超时)

nums=[-4,-1,0,3,10]
squnums = []

### 想的是先平方,后排序(暴力解法)
#1、先平方

for i in range(len(nums)):
    squnums.append(nums[i]*nums[i])

print(squnums)


#2、后排序
for i in range(len(squnums)):
    for n in range(len(squnums)):
        if (squnums[i]<squnums[n]):
            #int temp
            temp = squnums[i]
            squnums[i] = squnums[n]
            squnums[n] = temp
  
print("排序后")
print(squnums)  

时间复杂度为O(n)+O(nlogn) 【你用的排序方法的复杂度】

双指针法:

使用双指针法的重点是这道题目是有序的,给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。

既然有序,说明可以从头和尾巴开始一一对比。

nums=[-4,-1,0,3,10]
squnums = [0] * len(nums)
k = len(nums) - 1 #注意⚠️这里也容易错,是0开始所以要-1

#双指针法
i = 0
j = len(nums) - 1

while(i!=j):#没有考虑到i = j 的情况; 正确:i〈=j
    if nums[i]*nums[i] > nums[j]*nums[j]:
        squnums[k] = nums[i]*nums[i]
        i += 1
    else:
        squnums[k] = nums[j]*nums[j]
        j -=1

    k -= 1

print(squnums)

209. 长度最小的子数组

滑动窗口法:用一个for循环来做两个for循环所做的事情

重点 1)
for( j <---这个j很重要,到底表示的是起始位置呢还是终止位置?

重点 2)

判断条件 if / while sum > s

        target = 7
        nums = [2,3,1,2,4,3]
        #例子

        i = 0
        sum = 0
        result = 10000000 #这里要取一个最大值
        flag = False
        
        for j in range(len(nums)):
            sum = sum + nums[j]
            while sum >= target:
                subL = j - i + 1
        #更新值 这里有点没明白
                result = min(result,subL)
        #最终值j向后移动一位后,i向前移动,这时sum应该剪去之前的值
                sum = sum - nums[i]
                i+=1
                flag = True
        
        if flag == True:
            return result
        else:
            return 0

​​​​​​59. 螺旋矩阵 II

先放这里,有点没懂,后面再补

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值