Python每日一练(20230219)

news2024/12/29 2:26:30

目录

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 random

def 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 = temp
        print(rst_list)
        if 37 in rst_list:
            print("rst_list:",rst_list)
            return rst_list
        else:
            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 = x
    self.next = None

class LinkList:
  def __init__(self):
    self.head=None
  def initList(self, data):
    self.head = ListNode(data[0])
    r=self.head
    p = self.head
    for i in data[1:]:
      node = ListNode(i)
      p.next = node
      p = p.next
    return r
  def  convert_list(self,head):
    ret = []
    if head == None:
      return
    node = head
    while node != None:
      ret.append(node.val)
      node = node.next
    return ret

class Solution(object):
  def rotateRight(self, head, k):
    """
    :type head: ListNode
    :type k: int
    :rtype: ListNode
    """
    if not head or k == 0:
      return head
    slow = fast = head
    length = 1
    while k and fast.next:
      fast = fast.next
      length += 1
      k -= 1
    if k != 0:
      k = (k + length - 1) % length 
      return self.rotateRight(head, k)
    else:
      while fast.next:
        fast = fast.next
        slow = slow.next
      return self.rotate(head, fast, slow)
  def rotate(self, head, fast, slow):
    fast.next = head
    head = slow.next
    slow.next = None
    return 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[int], lower: int, upper: int) -> int:
    prefix = [0]
    last = 0
    for num in nums:
      last += num
      prefix.append(last)
    print(prefix)
    def count(pp, left, right):
      if left == right:
        return 0
      else:
        mid = (left + right) // 2
        ans = count(pp, left, mid) + count(pp, mid + 1, right)
        i1, i2, i3 = left, mid + 1, mid + 1
        while i1 <= mid:
          while i2 <= right and pp[i2] - pp[i1] < lower:
            i2 += 1
          while i3 <= right and pp[i3] - pp[i1] <= upper:
            i3 += 1
          ans += i3 - i2
          i1 += 1
        result = []
        i1, i2 = left, mid + 1
        while i1 == mid and i2 == right:
          if pp[i1] <= pp[i2]:
            result.append(pp[i1])
            i1 += 1
          else:
            result.append(pp[i2])
            i2 += 1
        while i1 <= mid:
          result.append(pp[i1])
          i1 += 1
        while i2 <= right:
          result.append(pp[i2])
          i2 += 1
        for i in range(len(result)):
          pp[i + left] = result[i]
        return ans
    return count(prefix, 0, len(prefix) - 1)

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

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

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

以上四选一 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/355889.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高级前端一面面试题集锦

详细说明 Event loop 众所周知 JS 是门非阻塞单线程语言&#xff0c;因为在最初 JS 就是为了和浏览器交互而诞生的。如果 JS 是门多线程的语言话&#xff0c;我们在多个线程中处理 DOM 就可能会发生问题&#xff08;一个线程中新加节点&#xff0c;另一个线程中删除节点&#…

[LeetCode周赛复盘] 第 98 场双周赛20230219

[LeetCode周赛复盘] 第 98 场双周赛20230219 一、本周周赛总结二、 [Easy] 6359. 替换一个数字后的最大差值1. 题目描述2. 思路分析3. 代码实现三、[Medium] 6361. 修改两个元素的最小分数1. 题目描述2. 思路分析3. 代码实现四、[Medium] 6360. 最小无法得到的或值1. 题目描述2…

将镭神C32激光雷达的PointXYZ数据转化为PointXYZIR格式 - 附代码

之前遇到过“镭神32线激光雷达ROS下运行fromRosMsg()报错 Failed to find match for field “intensity“ 问题”&#xff0c; 当时确定了是镭神C32雷达缺少相应字段&#xff0c;并记录博客【学习记录】镭神32线激光雷达ROS下运行fromRosMsg()报错 Failed to find match for fi…

如何正确使用chatgpt,让chatgpt回答优质内容?

我们以chatgpt写一篇文章为例。大家都知道&#xff0c;如果直接让chatgpt写某篇文章&#xff0c;他的回答总是简洁明了的&#xff0c;因为它定位就是聊天&#xff0c;而不是会像“舔狗”一样写一篇小作文。 并且他的回答&#xff0c;总是固定格式的&#xff0c;只要稍微了解ch…

Kubernetes02:知识图谱

Kubernetes01&#xff1a;知识图谱 MESOS APACHE 分布式资源管理框架 2019-5 Twitter 》 Kubernetes Docker Swarm 2019-07 阿里云宣布 Docker Swarm 剔除 Kubernetes Google 10年容器化基础架构 borg Go语言 Borg 特点 轻量级&#xff1a;消耗资源小 开源 弹性伸缩 负载均…

根据mysql的sql文件逆向生成powerdesigner的pdm文件

背景 我们在软件项目中最基本的组成部分就是数据库&#xff0c;那么在有数据库文件的情况下如何将库表逆向生成powerdesigner的设计文件呢&#xff1f; 文字步骤 打开powerdesigner软件&#xff0c;然后选择 File ->ReverseEngineer ->Database &#xff08;1&#x…

OnlyOffice本地部署实现Excel预览(docker安装)

下载onlyoffice镜像 docker pull onlyoffice/documentserver 如果下载不了 可以尝试添加镜像 /etc/docker daemon.json文件内 添加一行 {“registry-mirrors”: [“http://f1361db2.m.daocloud.io”]} 启动镜像 &#xff08;第一个17315表示onlyoffice服务对外的端口号&…

[AUTOSAR][Fls模块] Flash Driver Module

Flash Driver Module--jianqiang.xue一、 简介二、 措施方式一&#xff1a;将FLASH操作程序作为Bootloader组件的一部分固化在存储器中方式二&#xff1a;通过通讯口将该部分代码从上位机下载到指定的RAM方式三&#xff1a;将Flash功能函数作为数据运行(推荐&#xff01;&#…

23种设计模式介绍(Python示例讲解)

文章目录一、概述二、设计模式七种原则三、设计模式示例讲解1&#xff09;创建型模式1、工厂模式&#xff08;Factory Method&#xff09;【1】简单工厂模式&#xff08;不属于GOF设计模式之一&#xff09;【2】工厂方法模式2、抽象工厂模式&#xff08;AbstractFactory&#x…

Python抽奖系统

#免费源码见文末公众号# 抽奖系统① def choujiang1():def write():with open(d:\\抽奖系统\\抽奖1.1.pickle,rb) as file:lst1pickle.load(file)namevar1.get()if name not in lst1 and name!录入成功&#xff01; and name!录入失败&#xff01; and name!:lst1.append(name)…

基于springboot+vue的便利店库存管理系统

基于springbootvue的便利店库存管理系统 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景…

C++面向对象(上)

文章目录前言1.面向过程和面向对象初步认识2.引入类的概念1.概念与用法2.类的访问限定符及封装3.类的作用域和实例化4.类的大小计算8.this指针3.总结前言 本文将对C面向对象进行初步介绍&#xff0c;引入类和对象的概念。围绕类和对象介绍一些基础知识&#xff0c;为以后深入学…

【数据结构】————栈

文章目录前言栈是什么&#xff0c;栈的特点实现栈的基本操作栈的相关操作声明1.创建栈2.对栈进行初始化3.销毁栈4.判断栈是否为空5.压栈操作6.删除栈顶元素7.取出栈顶元素8.计算栈内存放多少个数据总结前言 本文主要讲述特殊的线性表——栈&#xff1a; 栈是什么&#xff0c;栈…

学生信息管理系统(通讯录)----------通俗易懂、附源码、C语言实现

绪论&#xff1a; 本篇文章使结构体章节后的习题&#xff0c;如果你对C语言有问题&#xff0c;或者结构体有什么问题不妨看看我之前所写的文章&#xff08;章回体&#xff09;,对于文件管理和内存分配问题我将在后面补上&#xff0c;对于这个学生信息管理系统我用了多种方法和…

五【Spring】控制反转(IOC)

目录一 Ioc控制反转1.1 概述1.2 依赖注入二 传统依赖的问题2.1 在传统的项目中三 引入Spring解决3.1 Spring配置文件中Bean属性3.2 Bean的作用域3.3 项目案例四 基于xml的依赖注入&#xff08;注意有参 无参的构建&#xff09;4.1 设置注入4.2 构造注入&#xff08;依赖有参构造…

【Java面试总结】MySQL篇·优化篇

【Java面试总结】MySQL篇SQL优化篇1.该如何优化MySQL的查询&#xff1f;2.怎样插入数据才能更高效&#xff1f;3.表中包含几千万条数据该怎么办&#xff1f;4.MySQL的慢查询优化有了解吗&#xff1f;5.说一说你对explain的了解6.explain你一般关注什么&#xff1f;1.该如何优化…

【Linux】网络编程 - Socket套接字/基于UDP的网络通信

目录 一.套接字 1.什么是套接字/Socket套接字 2.套接字的分类 3.Socket套接字的常见API 二.网络字节序 1.什么是网络字节序 2.网络字节序和主机字节序的转换接口 三.IP地址形式上的转换 四.客户端的套接字不由程序员bind 1.为什么客户端套接字不能由程序员bind 2.OS…

【题外话】如何拯救小米11Pro这款工业垃圾

1 背景媳妇用小米11Pro手机&#xff0c;某日不慎摔落&#xff0c;幸好屏幕未碎&#xff0c;然而WiFi却怎样都无法打开&#xff0c;初以为是系统死机&#xff0c;几天依旧故障无法使用。现在的手机没有WiFi功能&#xff0c;就无法刷抖音、看视频&#xff0c;就是鸡肋了。后抽空去…

全栈之路-前端篇 | 第三讲.基础前置知识【前端标准与研发工具】学习笔记

欢迎关注「全栈工程师修炼指南」公众号点击 &#x1f447; 下方卡片 即可关注我哟!设为「星标⭐」每天带你 基础入门 到 进阶实践 再到 放弃学习&#xff01;涉及 企业运维、网络安全、应用开发、物联网、人工智能、大数据 学习知识“ 花开堪折直须折&#xff0c;莫待无花空折…

【2.19】算法题2:贪心算法、动态规划、分治

题目&#xff1a;给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。子数组 是数组中的一个连续部分。方法一&#xff1a;贪心算法原理&#xff1a;若当前指针所指元素之前的和小…