一、有序数组的平方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螺旋矩阵文章来源:https://uudwc.com/A/0ngJ4
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