代码随想录算法训练营17期day02-python

一、有序数组的平方leetcode.977,
给你一个按非递减顺序排序的整数数组nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
【双指针法】
#用nums接收键盘输入的字符串
nums = input().split()
#定义一个空列表
list = []
for i in nums:
    #将input输入的数据转换为列表,并将元素转换为int类型
    list.append(int(i))
#定义函数
def getarr(nums):
    #左指针为左边界,右指针为右边界
    left = 0
    right = len(nums) - 1
    #定义一个新数组,长度与原数组相同,因为是非递减顺序,所以下标k从-1开始(也可以从len(num)-1开始)
    k = -1
    arr = [0] * len(nums)
    #开始遍历,左闭右闭
    while left <= right:
        #将左右指针对应的元素平方中较大值放入结果列表arr中,对应的指针向中间移动,即right--或left++(每次循环只执行二者中的一个)
        if nums[left] ** 2 < nums[right] ** 2:
            arr[k] = nums[right] ** 2
            right -= 1
        else:
            arr[k] = nums[left] ** 2
            left += 1
        #结果数组的下标前移,因为每次循环总有数据进入,所以每次都要k--
        k -= 1
    return arr

print(getarr(list))
二、长度最小的子数组,leetcode209
给定一个含有 n个正整数的数组和一个正整数s,找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组,
并返回其长度。如果不存在符合条件的子数组,返回 0。
示例:
输入:s = 7, nums = [2,3,1,2,4,3] 输出:2 解释:子数组 [4,3] 是该条件下的长度最小的子数组。

【双指针法】
# 用nums接收键盘输入的字符串
nums = input().split()
target = int(input())
# 定义一个空列表
list = []
for i in nums:
    # 将input输入的数据转换为列表,并将元素转换为int类型,以便后续对元素进行数学运算
    list.append(int(i))

#定义函数
def getlen(nums, target):
    #定义快慢指针,初始值均为0
    slow, fast = 0, 0
    #初始化累加值
    sum = 0
    #初始化元素的个数为无穷大
    count = float('inf')
    #外层循环,边界左闭右闭
    while fast < len(nums):
        #累加值为快指针遍历的元素之和
        sum += nums[fast]
        #内层循环为判定条件,当累计值大于等于目标值时,开始内层循环
        while sum >= target:
            #元素个数为快慢指针间的元素个数与原个数之间的最小值
            count = min(count, fast - slow + 1)
            #此种情况下,累加值减去窗口内的第一个元素,即慢指针对应的元素
            sum -= nums[slow]
            #慢指针相应后移
            slow += 1
        #快指针为外层循环的条件,无论如何均向后移
        fast += 1
    return count
#此解法看似两层循环,实则遍历两次,并不是真正的两层循环,所以时间复杂度为O(2n)

print(getlen(list,target))

三、leetcod.059螺旋矩阵

num = int(input())

def getmatrix(num):  # 定义函数获取螺旋矩阵
    start_x, start_y = 0, 0  # 初始化行数和列数
    arr = [[0] * num for _ in range(num)]
    loop = num // 2  # 定义转圈的总次数,总次数为整数nums对2取商
    count = 1  # 初始化数字,从1开始
    ringcount = 1  # 初始化圈数,开始时为1
    while ringcount <= loop:  # 外循环为螺旋转圈,圈数从1开始,循环条件为<=loop
        # 从左向右遍历(矩阵的上边),将最后一位留给下一步的遍历,区间为左闭右开,所以此处边界条件为nums-ringcount,下同;
        for i in range(start_y, num - ringcount):
            arr[start_x][i] = count
            count += 1
        #从上到下遍历(矩阵的右边)
        for j in range(start_x, num - ringcount):
            arr[j][num - ringcount] = count
            count += 1
        # 从右向左遍历(矩阵的下边),遍历顺序从右向左,顺序为-1
        for i in range(num - ringcount, start_y, -1):
            arr[num - ringcount][i] = count
            count += 1
        # 从下向上遍历(矩阵的下边),遍历顺序从下向上,顺序为-1
        for j in range(num - ringcount, start_x, -1):
            arr[j][start_y] = count
            count += 1
        start_x += 1
        start_y += 1
        ringcount += 1
    #当num为奇数时,遍历完成时螺旋矩阵中心的位置就是最终的count值
    if (num % 2) != 0:
        arr[start_x][start_y] = count
    for i in range(num):
        print(arr[i])

getmatrix(num)

2023-6-29打卡第一天,加油,贵在坚持,每天进步一点就好文章来源地址https://uudwc.com/A/0ngJ4

原文地址:https://blog.csdn.net/2302_76473349/article/details/131467598

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

上一篇 2023年07月08日 20:26
下一篇 2023年07月08日 20:29