当前位置: 首页 > news >正文

Python每日一练(20230219)

目录

1. 循环随机取数组直到得出指定数字?

2. 旋转链表

3. 区间和的个数


1. 循环随机取数组直到得出指定数字?

举个例子: 随机数字范围:0~100 每组数字量:6(s1,s2,s3,s4,s5,s6) 第二轮开始随机数字范围:新s1和新s2取值为旧s1和s2之间,新s3和新s4取值为旧s3和s4之间,新s5和新s6取值为旧s5和s6之间。 跳出循环条件:任意数字=37 如因s1=s2!=37&&s3=s4!=37&&s5=s6!=37使数组进入无意义无限循环,则重新取0~100六个数字并开始如上述第二轮随机的随机取值。

代码: 

import randomdef random_test():rst_list = [random.randint(0,100) for i in range(0, 6)]print(rst_list)while 1:temp = []for k,v in enumerate(rst_list):if k%2==0:temp.append(random.randint(min([rst_list[k],rst_list[k+1]]),max([rst_list[k],rst_list[k+1]])))else:temp.append(random.randint(min(rst_list[k-1], rst_list[k]),max(rst_list[k-1], rst_list[k])))rst_list = tempprint(rst_list)if 37 in rst_list:print("rst_list:",rst_list)return rst_listelse:if rst_list[0]==rst_list[1] and rst_list[2]==rst_list[3] and rst_list[4]==rst_list[5]:rst_list = [random.randint(0, 100) for i in range(0, 6)]def main():random_test()if __name__ == "__main__":main()

[20, 2, 33, 26, 67, 7]
[15, 6, 28, 28, 8, 29]
[15, 13, 28, 28, 29, 21]
[13, 14, 28, 28, 22, 27]
[14, 13, 28, 28, 27, 24]
[14, 13, 28, 28, 27, 25]
[14, 14, 28, 28, 27, 26]
[14, 14, 28, 28, 27, 27]
[51, 38, 46, 43, 45, 41]
[42, 39, 43, 43, 43, 43]
[39, 40, 43, 43, 43, 43]
[40, 39, 43, 43, 43, 43]
[40, 39, 43, 43, 43, 43]
[39, 39, 43, 43, 43, 43]
[91, 22, 53, 47, 20, 20]
[40, 76, 53, 47, 20, 20]
[44, 68, 48, 49, 20, 20]
[65, 51, 49, 48, 20, 20]
[58, 57, 49, 49, 20, 20]
[57, 57, 49, 49, 20, 20]
[37, 42, 15, 19, 61, 63]
rst_list: [37, 42, 15, 19, 61, 63]

#注: 随机数字输出

2. 旋转链表

给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。

示例 1:

输入:head = [1,2,3,4,5], k = 2
输出:[4,5,1,2,3]

示例 2:

输入:head = [0,1,2], k = 4
输出:[2,0,1]

提示:

  • 链表中节点的数目在范围 [0, 500] 内
  • -100 <= Node.val <= 100
  • 0 <= k <= 2 * 109

代码:

class ListNode(object):def __init__(self, x):self.val = xself.next = Noneclass LinkList:def __init__(self):self.head=Nonedef initList(self, data):self.head = ListNode(data[0])r=self.headp = self.headfor i in data[1:]:node = ListNode(i)p.next = nodep = p.nextreturn rdef    convert_list(self,head):ret = []if head == None:returnnode = headwhile node != None:ret.append(node.val)node = node.nextreturn retclass Solution(object):def rotateRight(self, head, k):""":type head: ListNode:type k: int:rtype: ListNode"""if not head or k == 0:return headslow = fast = headlength = 1while k and fast.next:fast = fast.nextlength += 1k -= 1if k != 0:k = (k + length - 1) % length return self.rotateRight(head, k)else:while fast.next:fast = fast.nextslow = slow.nextreturn self.rotate(head, fast, slow)def rotate(self, head, fast, slow):fast.next = headhead = slow.nextslow.next = Nonereturn head# %%
l = LinkList()
list1 = [0,1,2]
k = 4
l1 = l.initList(list1)
s = Solution()
print(l.convert_list(s.rotateRight(l1, k)))

 输出:

[2, 0, 1]

3. 区间和的个数

给你一个整数数组 nums 以及两个整数 lower 和 upper 。求数组中,值位于范围 [lower, upper] (包含 lower 和 upper)之内的 区间和的个数 。

区间和 S(i, j) 表示在 nums 中,位置从 i 到 j 的元素之和,包含 i 和 j (i ≤ j)。

示例 1:

输入:nums = [-2,5,-1], lower = -2, upper = 2
输出:3
解释:存在三个区间:[0,0]、[2,2] 和 [0,2] ,对应的区间和分别是:-2 、-1 、2 。

示例 2:

输入:nums = [0], lower = 0, upper = 0
输出:1

提示:

  • 1 <= nums.length <= 105
  • -231 <= nums[i] <= 231 - 1
  • -105 <= lower <= upper <= 105
  • 题目数据保证答案是一个 32 位 的整数

 代码:

class Solution:def countRangeSum(self, nums: list, lower: int, upper: int) -> int:prefix = [0]last = 0for num in nums:last += numprefix.append(last)def count(pp, left, right):if left == right:return 0else:mid = (left + right) // 2ans = count(pp, left, mid) + count(pp, mid + 1, right)i1, i2, i3 = left, mid + 1, mid + 1while i1 <= mid:while i2 <= right and pp[i2] - pp[i1] < lower:i2 += 1while i3 <= right and pp[i3] - pp[i1] <= upper:i3 += 1ans += i3 - i2i1 += 1result = []i1, i2 = left, mid + 1while i1 <= mid and i2 <= right:if pp[i1] <= pp[i2]:result.append(pp[i1])i1 += 1else:result.append(pp[i2])i2 += 1while i1 <= mid:result.append(pp[i1])i1 += 1while i2 <= right:result.append(pp[i2])i2 += 1for i in range(len(result)):pp[i + left] = result[i]return ansreturn count(prefix, 0, len(prefix) - 1)if __name__ == "__main__":s = Solution()print(s.countRangeSum([-2,5,-1],-2,2))print(s.countRangeSum([0],0,0))

输出:

3

1

http://www.lryc.cn/news/13118.html

相关文章:

  • vTESTstudio - VT System CAPL Functions - VT7001
  • 「可信计算」论文初步解读
  • CSDN 算法技能树 蓝桥杯-基础 刷题+思考总结
  • 信小程序点击按钮绘制定制转发分享图
  • Python自动化测试-使用Pandas来高效处理测试数据
  • 语音增强学习路线图Roadmap
  • nginx配置ssl实现https访问
  • JavaScript 语句
  • 将古老的ASP项目转换为PHP初探
  • 数据结构复习(七)模板类封装实现不带头结点的单链表
  • IDEA插件 RestfulTool插件——Restful服务开发辅助工具集
  • 2023年全国最新会计专业技术资格精选真题及答案1
  • Linux 配置RAID组
  • 【2021/推荐/社交网络】Socially-Aware Self-Supervised Tri-Training for Recommendation
  • Django搭建个人博客Blog-Day06
  • DQL 多表查询
  • BUUCTF Reverse xor
  • vite和esbuild/roolup的优缺点
  • 32-Golang中的map
  • LeetCode-384-打乱数组
  • 九龙证券|重大利好!期货公司打新再“解绑”:可直接参与首发网下配售!
  • 信号完整性设计规则之串扰最小化
  • Windows Ubuntu双系统 设置时间同步方式
  • 【python】英雄联盟电竞观赛引擎 掉落提示 CapsuleFarmerEvolved 「Webhook」「钉钉」
  • 加油站会员管理小程序实战开发教程11
  • Python量化入门:投资的风险有哪些?
  • AV1编码标准整体概述
  • 基于springboot+vue的药物咨询平台
  • 第64章 SQL 主机教程
  • 【软件测试】python接口自动化测试编写脚本,资深测试总结方法,你的实用宝典......