python练习(十一)

定义一个 prime() 函数求整数 n 以内(不包括n)的所有素数),并返回一个按照升序排列的素数列表。使用递归来实现一个二分查找算法函数bi_search(),该函数实现检索任意一个整数。 # -*- coding: utf-8 -*- """ Created on Fri Aug  3 22:09:13 2018 定义一个 prime() 函数 求整数 n 以内(不包括n)的所有素数(1不是素数), 并返回一个按照升序排列的素数列表。 使用递归来实现一个二分查找算法函数bi_search(), 该函数实现检索任意一个整数在 prime() 函数生成的素数列表中位置(索引)的功能... 阅读详情

注意,答案只是代表是他人写的代码,正确,但不一定能通过测试(比如超时),列举出来只是它们拥有着独到之处,虽然大部分确实比我的好

Number of Boomerangs

题目

Given n points in the plane that are all pairwise distinct, a “boomerang” is a tuple of points (i, j, k) such that the distance between i and j equals the distance between i and k (the order of the tuple matters).

Find the number of boomerangs. You may assume that n will be at most 500 and coordinates of points are all in the range [-10000, 10000] (inclusive).

Example:
Input:
[[0,0],[1,0],[2,0]]

Output:
2

Explanation:
The two boomerangs are [[1,0],[0,0],[2,0]] and [[1,0],[2,0],[0,0]]

思路与解答

感觉可不太好做,两重遍历肯定是能做出来的,不过绝对不是一个好主意
所以呢。。。
记录点于点之间的距离,怕不是还是要遍历
扫了眼讨论区,都是O(n^2)的,遍历吧

from collections import Counter
class Solution(object):
    def numberOfBoomerangs(self, points):
        """
        :type points: List[List[int]]
        :rtype: int
        """
        l=[]
        ssum =0
        for i in points:
            l.append([((i[0]-j[0])**2+(i[1]-j[1])**2)**0.5 for j in points])
        for x in l:
            s = Counter(x)
            for ss in s.values():
                ssum += ss*(ss-1)
        return ssum

不出意料的超时了

使用字典,但是忘记每次循环清空字典了,尴尬

from collections import defaultdict
class Solution(object):
    def numberOfBoomerangs(self, points):
        """
        :type points: List[List[int]]
        :rtype: int
        """
        d = defaultdict(int)
        ssum =0
        for i in points:
            d.clear()
            for j in points:
                x = ((i[0]-j[0])**2+(i[1]-j[1])**2)**0.5
                d[x] +=1
                ssum +=(d[x]-1)*2
        return ssum

通过了哈哈哈
1500ms,26%

答案

class Solution(object):
    def numberOfBoomerangs(self, points):
        length = len(points)
        res = 0
        for p1 in points:
            D = dict()
            for p2 in points:
                distance = (p1[0] - p2[0]) ** 2 + (p1[1] - p2[1]) ** 2
                if(distance in D):
                    res += D[distance]
                    D[distance] += 2
                else:
                    D[distance] = 2
        return res

别人的600+ms的
…看起来和我的差不多嘛…

重写

莫非是defaultdict的问题?还是clear的问题?
不是clear 的问题
去掉defaultdict下降到1100ms了,还是不够
诶?才发现它没有开根号的操作!!!是啊,不需要
下降到800+ms
只有在d[x]大于1的时候才需要进行相加

class Solution(object):
    def numberOfBoomerangs(self, points):
        """
        :type points: List[List[int]]
        :rtype: int
        """
        ssum =0
        for i in points:
            d = {}
            for j in points:
                x = (i[0]-j[0])**2+(i[1]-j[1])**2
                if x in d:
                    d[x] +=1
                    ssum +=(d[x]-1)*2
                else:
                    d[x] = 1           
        return ssum

666ms差不多了(虽然看到100+ms的java与300ms的c++)
多重循环里的每一句话都有深思啊

tips

关于x**2与x*x在py2与py3的区别

Pascal’s Triangle

题目

Given numRows, generate the first numRows of Pascal’s triangle.

For example, given numRows = 5,
Return

[
     [1],
    [1,1],
   [1,2,1],
  [1,3,3,1],
 [1,4,6,4,1]
]

思路与解答

这不是杨辉三角嘛
所以怎么通过层数生成相应的list呢(好像这个也有作弊方法啊,就是不知道最大几层)

l=[]
        n=0
        while n < numPows:
            l.append()
            n += 1
        return l 

函数主体肯定是这样的

class Solution(object):
    def generate(self, numRows):
        """
        :type numRows: int
        :rtype: List[List[int]]
        """
        l=[]
        if numRows:l=[[1]]
        n=1
        while n < numRows:
            l2 = [0]+l[n-1]+[0]
            l.append([l2[i]+l2[i+1] for i in range(n+1)]) 
            n += 1
        return l 

通过
39ms ,40%可以接受

答案

def generate(numRows):
    pascal = [[1]*(i+1) for i in range(numRows)]
    for i in range(numRows):
        for j in range(1,i):
            pascal[i][j] = pascal[i-1][j-1] + pascal[i-1][j]
    return pascal

我还以为这样的会比较慢呢,比我的还快一点

def generate(self, numRows):
        res = [[1]]
        for i in range(1, numRows):
            res += [map(lambda x, y: x+y, res[-1] + [0], [0] + res[-1])]
        return res[:numRows]

求杨辉三角时使用了非常棒的思路
return 的方式也非常棒,光是这一点就能让我减少不少代码
话说这个lambda函数和operator.add功能一样把,可以替换吧
可以替换

重写

class Solution(object):
    def generate(self, numRows):
        """
        :type numRows: int
        :rtype: List[List[int]]
        """
        l=[[1]]
        for n in range(numRows-1):
            l2 = [0]+l[n]+[0]
            l.append([l2[i]+l2[i+1] for i in range(n+2)]) 
        return l[:numRows] 

虽然时间没有什么变化,但是代码短了啊

Pascal’s Triangle II

题目

Given an index k, return the kth row of the Pascal’s triangle.

For example, given k = 3,
Return [1,3,3,1].

Note:
Could you optimize your algorithm to use only O(k) extra space?

思路与解答

唔。。。

class Solution(object):
    def getRow(self, rowIndex):
        """
        :type rowIndex: int
        :rtype: List[int]
        """
        l=[[1]]
        for n in range(rowIndex):
            l2 = [0]+l[n]+[0]
            l.append([l2[i]+l2[i+1] for i in range(n+2)]) 
        return l[rowIndex] 

52ms,9%有点慢啊

class Solution(object):
    def getRow(self, rowIndex):
        """
        :type rowIndex: int
        :rtype: List[int]
        """
        l=[[1]]
        for n in range(rowIndex):
            l += [map(operator.add, l[-1] + [0], [0] + l[-1])]
        return l[rowIndex] 

这种确实比我的要快啊

答案

class Solution(object):
    def getRow(self, rowIndex):
        """
        :type rowIndex: int
        :rtype: List[int]
        """
        l=[1]
        for n in range(rowIndex):
            l = [x + y for x, y in zip([0]+l, l+[0])]
        return l

据说这种方法比map要快30%,但是很不幸,在我的电脑上做不到这点多次测试大概快了不到8%(2/35)

Remove Duplicates from Sorted List

题目

Given a sorted linked list, delete all duplicates such that each element appear only once.

For example,
Given 1->1->2, return 1->2.
Given 1->1->2->3->3, return 1->2->3.

思路与解答

…sorted()
哎呀,是个链表

class Solution(object):
    def deleteDuplicates(self, head):
        """
        :type head: ListNode
        :rtype: ListNode
        """
        l=[]
        on=n=head
        while n != None:
            if n.val not in l:
                l.append(n.val)
                on = n
                n = n.next
            else:
                n = on.next = n.next
        return head

50%可以接受

答案

def deleteDuplicates(self, head):
        """
        :type head: ListNode
        :rtype: ListNode
        """
        cur = head
        while cur and cur.next:
            if cur.val == cur.next.val:
                cur.next = cur.next.next
            else:
                cur = cur.next
        return head

感觉确实要好一些

Power of Four

题目

Given an integer (signed 32 bits), write a function to check whether it is a power of 4.

Example:
Given num = 16, return true. Given num = 5, return false.

Follow up: Could you solve it without loops/recursion?

思路与解答

     if num%4:return False
        while True:
            if num < 4:
                return False
            elif num == 4:
                return True
            else:
                num = num/4  

1也是4的幂,好吧是的
加上1的判断之后还是有问题
最开始除4没有余数不代表之后也没有哦
不应该把*1.0删除的

class Solution(object):
    def isPowerOfFour(self, num):
        """
        :type num: int
        :rtype: bool
        """
        if num==1:return True
        if num%4:return False
        while True:
            if num < 4:
                return False
            elif num == 4:
                return True
            num = num*1.0/4
            if num != int(num):
                return False

58ms10%有些不对了啊

答案

class Solution(object):
    def isPowerOfFour(self, num):
        """
        :type num: int
        :rtype: bool
        """
        '''
        若一个整数是4的幂,则其二进制形式具有如下特点:
        1. 最高位为1,其余位为0  ---- 用num & (num - 1) == 0 判断
        2. 0的个数为偶数        ----  用num & 0x55555555 > 0 判断

        There are even # of 0's, so 1 must be in the odd position.
        '''
        return num > 0 and num & (num - 1) == 0 and num & 0x55555555 != 0

唔。。。

        return num & (num - 1) == 0 and num & 0x55555555 != 0

查看讨论区发现第一个判断包含在其它两个判断里了,不需要再进行判断了

return num > 0 && (num & (num - 1)) == 0 && (num - 1) % 3 == 0;

另外一种有趣的思路(注意,这个不是python语言的)
证明#1:(4 ^ n-1)=(4-1)(4 ^(n-1)+ 4 ^(n-2)+ 4 ^(n-3)+ ….. + 4 + 1)

证明#2(通过感应)4 ^(n + 1)-1 = 4 4 ^ n -1 = 3 4 ^ n + 4 ^ n-1。第一个被除以3,第二个被归纳假设证明

首先,任何数字通过“n ^(n-1)== 0”必须是2的幂。
其次,上述所有数字可以进一步分类为2类。A:所有数字为2 ^(2k + 1),B:所有数字为2 ^(2k)。
第三,我们可以看出,2 ^(2k + 1)-1不能通过(n-1)%3 == 0的测试。(通过感应)所以所有A被排除,只剩下B,这是4的幂。

【Python】蓝桥杯真题练习——十一届省赛 一共有5个 2020。其中1个是在同一行里的,1个是在同一列里的3 个是斜线上的。 小蓝的矩阵比上面的矩阵要大,如下给出了小蓝的矩阵(300*300)。 请帮助小蓝确定在他的矩阵中有多少个 2020。用列表按行存储,按行查找就是每个元素内查找,按列查找就是list[i]j对角线查找则i,j都改变按行存储的实现是靠split方法实现的,去除两边的空格获得每一行的字符串形式,将其追加到列表中即可查找2020时值得注意的是,不能用count函数直接统计数量,例如‘202020’中包含有两个2020,但是使用cou 阅读详情

相关推荐

Python实战:3步搞定DICOM转JPG/PNG(附批量处理脚本)

本文详细介绍了如何使用Python在3步内将DICOM医学影像转换为JPG/PNG格式,并提供了批量处理脚本。通过Pydicom、Pillow和NumPy库的组合,解决了像素值处理、批量转换效率和医学图像特性保留等关键问题,适合医疗AI开发者和放射科医生快速集成到工作流中。

numpy6sculptor的博客 590

【每日一题】【LeetCode】【第十一天】【Python】杨辉三角

LeetCode每日记录,今日解决“杨辉三角”的经典问题,自己通过二叉树的顺序存储找父子结点的规律,一步步联想到了杨辉三角存在的规律,第一次达成提交了一次就通过!哈哈

_MoNanGo_ 657

FastAPI + React:现代 Web 前后端分离开发的全栈实践指南

• 部署:CI/CD 双流水线,前端 push → GitHub Actions → Cloudflare Pages;• 后端:分层结构 routers → services → repositories → models,单测覆盖率 90 %。• 接口缓存:Redis + FastAPI Depends 实现接口级缓存,读 QPS 提升至 5 k。• 前端:BFF 由 React Query 代理,统一缓存、重试、分页。GET /items/{id} 详情。,前端同学无需等 Mock 即可联调。

未来已来,AI时代,学AI编程,做AI量化,就来大鹏AI教育。 1492

打印杨辉三角

def generate(numRows): r = [[1]] for i in range(1,numRows): r.append(list(map(lambda x,y:x+y, [0]+r[-1],r[-1]+[0]))) return r[:numRows] a=generate(10) for i in a: print(i)

m0_56852291的博客 154

保姆级教程:手把手教你用Python+Zemax仿真一个简易的Nd:YAG固体激光器谐振腔

本文提供了一份详细的Python与Zemax结合的Nd:YAG固体激光器谐振腔仿真教程。从基础理论到实战操作,涵盖晶体参数化、谐振腔设计、泵浦建模、动态仿真及热效应补偿等关键步骤,适合光学专业学生和工程师快速掌握激光器仿真技术。

weixin_30500473的博客 742

使用Avalonia跨Linux平台

Avalonia类似使用WPF的技术方法来开发,所以,需要会使用WPF,其中的一些语法和写法与WPF有所区别,但是他们相差不大,会WPF的话,基本上可以看看文档后,完全掌握Avalonia的使用,从而达到跨平台开发的任务。其实写法有些不一样,可以参考官网的说明,进行修改。2. 安装完成后,重启VS2022,我们可以看到1和2,其中1是使用MVVM模式开发,2是普通模式开发,我们选择2,建立项目。9.直接双击粉红色的文件,进行安装,输入密码,但是美中不足的是,好像没有图标,图标似乎需要单独去设置。

故里2130 1万+

python练习

1、尝试Python的XML-RPC远程调用 server端:   代码 class MyCMS: def getVersion(self): return "Powerd By Python 0.1a"cms=MyCMS()server = SimpleXMLRPCServer.SimpleXMLRPCServer(("localhost", 8888))s...

weixin_33739627的博客 197

《UDS协议从入门到精通》系列——到底什么是DTC?

到底什么是DTC?看这里,深度图解DTC格式,详述DTC状态位、快照信息和扩展信息!!

车载系统攻城狮 1万+

依次判断一系列给定的字符串是否为合法的 Python 标识符

# -*- coding: utf-8 -*- """ Created on Wed Aug  1 11:08:45 2018 @author: 金晓 """ #判断是否为合法的Python标识符 #标识符:首字符必须是字母或下划线,后面的字符只能是字母、数字、下划线 #不能是关键字(可以用keyword模块,iskeyword判断是不是关键字,kwlist所有的关键字列表) import st...

jinxiao1231的博客 6416

YOLOv11改进策略【Neck】| arXiv 2025 分层多头注意力HMHA 子空间拆分提多样 + 通道重排降冗余,强化目标检测精度

HMHA(Hierarchical Multi-Head Attention,分层多头注意力)旨在解决传统多头注意力(MHA)在图像恢复任务中的核心缺陷——特征冗余。传统MHA将通道均匀拆分给各个头,导致不同头学习的子空间信息相似,进而出现多头关注同一区域、忽略退化区域修复的问题,限制了模型的特征表达能力。HMHA通过“分层子空间拆分+通道重排序”策略,让每个头学习差异化、互补的上下文特征,从根源上缓解冗余,提升图像恢复任务中对复杂退化场景的特征捕捉能力。

Limiiiing的博客 778

直驱风机并网系统次同步振荡机理与振荡源定位方法研究

摘要: 本文针对直驱风机并网系统次同步振荡问题,研究了其产生机理与振荡源定位方法。通过建立系统小信号模型,采用特征值分析法揭示了次同步振荡的产生机制,并分析了电网强度、控制器参数对振荡特性的影响。基于暂态能量流理论,提出了通过计算各元件耗散能量来定位振荡源的方法。在MATLAB/Simulink平台搭建仿真系统验证了所提方法的有效性,为直驱风电场次同步振荡的分析与抑制提供了理论依据。 关键词:直驱风机;次同步振荡;小信号模型;暂态能量;振荡源定位

huanghm88的专栏 100

Python学习(十一):几个练习题,以及print的注意事项

Python学习(十一):几个练习题 这是我关于Python学习的第十一篇博客,加油! print,print(values,sep,end,file,flush) 其中,sep指的是打印的各元素用什么隔开(默认为空格‘\t’),end指的是打印的这一行末尾是什么(默认为换行符’\n’),我们可以设定Sep与end的值 print(1,2,3) print('abc') ''' 1 2 3 abc ''' 设定sep的值时 print(1,2,3,sep='*') print('abc') ''' 1

weixin_48087474的博客 913

镜头调焦的 调整的是焦距还是像距?

在镜头 “调焦”(即日常拍照时的)中,调整的核心是,而非焦距。

AIoT深度探索者 | 嵌入式系统架构师 深耕物联网(IoT)与人工智能(AI)融合技术,聚焦​​边缘计算、图像开发、低功耗通信协议​​,致力于智能硬件,关注我获取最新技术文章信息与海量资源~ 1350

Python练习十一

1.写一个程序,提示输入整数X,然后计算从1到X连续整数的和. num = int(input('please the input number:')) sum_num = 0 for i in range(1, num + 1): sum_num += i print(sum_num) 2.现有两元组(('a'),('b')),(('c'),('d')),请使用p...

weixin_30652879的博客 984

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

python输入1234输出4321_关于python的十一道练习

关于python的十一道练习1.编写程序,输入一个自然数字符串,然后输出各位数字之和。例如,输入字符串1234,输出10.1 def sums1(): #第一题2 strs=input(‘请输入一个自然数字符串:‘)3 num=04 for i inrange(0,len(strs)):5 num=num+int(strs[i:i+1])6 prin...

weixin_36315943的博客 6771

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

《Python编程:从入门到实践》第十一章练习题

《Python编程:从入门到实践》第十一章练习题

ProgramNovice的博客 504

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Python入门 速成练习实例十一

Python入门 速成练习实例 题目:求1+2!+3!+...+20!的和。 程序分析: 这是阶乘的意思,是一种数学运算符号,是指从1乘以2乘以3乘以4一直乘到“!”之前的数。 1!是指1的阶乘,1!=1; 2!是指2的阶乘,2!=1×2=2; 3!是指3的阶乘,3!=1×2×3=6; 依次类推。 任何大于1的自然数n阶乘表示方法:n!=1×2×3×……×...

子曰教育公司-----Mr.牛 1795

python输入一个包含若干自然数的列表_关于python的十一道练习

关于python的十一道练习1.编写程序,输入一个自然数字符串,然后输出各位数字之和。例如,输入字符串1234,输出10.1 def sums1(): #第一题2 strs=input('请输入一个自然数字符串:')3 num=04 for i inrange(0,len(strs)):5 num=num+int(strs[i:i+1])6 prin...

weixin_39951295的博客 2874

Python练习(十一)——爬虫练习

一. 爬取所有银行的银行名称和官网地址,并写入数据库。 import re from urllib.request import urlopen from urllib import request import pymysql def get_content(url): """ 获取网页内容 :param url: :return: """ u...

villaaaaaaaa 461

python练习七十一:文件操作练习

假设有关键字存放在text.txt文件中,当用户输入文件中包含的敏感字时,则用星号*替换例如:用户输入“西安我的故乡”时,则显示为“**我的故乡”代码;word_filter = set() #建立的是个集合,去除重复项 with open("test.txt","r") as f: for w in f.readlines(): word_filter.add(w.st...

weixin_30725467的博客 482

python核心编程第十一章练习

11-4 def time_in_minues(minues): print '%d minues' % minues def minues2h_and_m(): minue = minues % 60 hours = minues // 60 return '%d : %d' % (hours, minue) return

天行健 683

python的日常小练习(十一)

题目:按相反的顺序输出列表的值 思路:确定相反输出的起始定位点为-1 实现: a = ['one', 'two', 'three'] for i in a[::-1]: print (i) 输出结果: three two one

倾城——博客 394

(二十一)Python Json练习

import json data = { 'no': 1, 'name': 'WangFan', 'url': 'http://www.WangFan.com' } json_str = json.dumps(data) print("Python 原始数据:", repr(data)) print("JSON 对象:", json_str) data1 = { ...

我都不会的博客 1241

python3 练习题100例 (十一)

题目十一:举例证明角谷猜想:以一个正整数N为例,如果N为偶数,就将它变为N/2,如果除后变为奇数,则将它乘3加1(即3N+1)。不断重复这样的运算,经过有限步后,一定可以得到1。 #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 题目十一:举例证明角谷猜想:以一个正整数N为例,如果N为偶数,就将它变为N/2,如果除后变为奇数, 则将它乘3...

daxia5398的博客 2225

python兔子编程_Python兔子生兔子算法,编程练习题实例十一

Python兔子生兔子算法,编程练习题实例十一Python兔子生兔子算法,编程练习题实例十一没学习python之前就听说过一个兔子生兔子的数学算法问题。现在学习了python编程后,自然要用python语言来解决这个问题啦。Python编程练习题和答案实例十一,兔子生兔子的算法详解如下。Python练习题要求如下:简述:话说有一对可爱的兔子,出生后的第三个月开始,每一月都会生一对小兔子。当小兔子长...

weixin_39960319的博客 1381
上一篇: python练习(十)
下一篇: python练习(十二)
Misaka_S
博客等级 码龄9年 26粉丝 54原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值