Python世界:力扣题633,平方数之和,中等

news2024/11/14 0:32:58

Python世界:力扣题633,平方数之和,中等

    • 任务背景
    • 思路分析
    • 代码实现
    • 测试套件
    • 本文小结

任务背景


问题来自力扣题目633. Sum of Square Numbers,大意如下:

Given a non-negative integer c, decide whether there’re two integers a and b such that a^2 + b^2 = c.

翻译下,需求是:对给定数字c,确定是否有两个整数满足a^2+b^2=c

思路分析


二分法思路

  • 默认a,b均为非负,且b不小于a
  • 在0-sqrt©之间遍历a,直到a=b相遇或a>b跳出循环
  • cs = sqrt©
  • 此移动方式不通
    • 若b=sqrt(c-a^2) 圆整后,重加回满足目标,且b不小于a中断
    • 若b<a,a收缩为下界
    • 若b>a,a收缩为上界
  • 换为low/high双指针左右移动
    • 将0-cs之间的数平方和组合罗列为一种有序组合
    • 初始位:t = low2+high2,是在有序组合的中间
    • 若t > c,则缩小high
    • 若t < c,则增大low
    • 与纯二分区别在于,不仅单一mid在移动

代码实现


import math

class Solution(object):
    def judgeSquareSum(self, c):
        """
        :type c: int
        :rtype: bool
        """
        res = False
        cs = int(math.sqrt(c)) + 1
        low = 0
        high = cs
        while (low <= high): # two pointer
            t = low**2 + high**2
            if (t < c):
                low += 1
            elif (t > c):
                high -= 1
            else:
                return True
        return res

测试套件


单例测试demo:

# one case test
c = 5 # 1+4
c = 4 # 0+4
c = 3 # false
c = 13 # 4+9
c = 12 # false
c = 169 # 12^2+5^2

sol = Solution()
res = sol.judgeSquareSum(c)
print(res)

测试套demo:

# 导入单元测试
import unittest


def test_base(self, c, ret):
    sol = Solution()
    res = sol.judgeSquareSum(c)
    self.assertEqual(res, ret)    


# 编写测试套
class TestSol(unittest.TestCase):
    # 不在
    def test_special1(self):
        c = 3
        ret = False
        test_base(self, c, ret)

    # 下边界
    def test_special2(self):
        c = 0
        ret = True
        test_base(self, c, ret)

    # 上边界
    def test_special3(self):
        c = 2**31 - 1
        ret = False
        test_base(self, c, ret)

    def test_common1(self):
        c = 5
        ret = True
        test_base(self, c, ret)

    def test_common2(self):
        c = 13
        ret = True
        test_base(self, c, ret)

    def test_common3(self):
        c = 169
        ret = True
        test_base(self, c, ret)


# 含测试套版本主调
if __name__ == '__main__':
    print('start!')
    unittest.main() # 启动单元测试
    print('done!')

本文小结


本题思路很简单,只为重温下二分写法,发现值大的下移上界,发现值小的上移下界,直到上下界重合。要特别注意的是无target时,mid的偏移问题。

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

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

相关文章

qt QSyntaxHighlighter详解

1、概述 QSyntaxHighlighter是Qt文本处理框架中的一个强大工具&#xff0c;它专门用于实现文本编辑器中的语法高亮功能。通过自定义高亮规则&#xff0c;QSyntaxHighlighter可以实现对代码编辑器、富文本编辑器中的关键字、注释等内容的高亮显示。这一功能对于提升代码的可读性…

PyQt5 加载UI界面与资源文件

步骤一: 使用 Qt Designer 创建 XXX.ui文件 步骤二: 使用 Qt Designer 创建 资源文件 步骤三: Python文件中创建相关类, 使用 uic.loadUi(mainwidget.ui, self ) 加载UI文件 import sys from PyQt5 import QtCore, QtWidgets, uic from PyQt5.QtCore import Qt f…

国家级财经类211/985学科院校招收申请制硕士

国家级财经类211/985学科院校招收申请制硕士 ◎免试入学&#xff0c;边学边考&#xff0c;申硕便捷&#xff1b; ●1.5-2年制&#xff0c;无需辞职&#xff0c;远程学习&#xff1b; ◎考试方式灵活&#xff0c;可多次申考&#xff1b; ●申请考核制&#xff0c;学信网报名注…

Spring Boot - 扩展点 EnvironmentPostProcessor源码分析及真实案例

文章目录 概述EnvironmentPostProcessor 作用EnvironmentPostProcessor 实现和注册创建类并实现接口注册到 Spring Boot常见应用场景 源码分析1. EnvironmentPostProcessor 接口定义2. 扩展点加载流程3. 加载 EnvironmentPostProcessor 实现类4. EnvironmentPostProcessor 执行…

解决表格出现滚动条样式错乱问题

自定义表格出现滚动条时&#xff0c;会因为宽度不对等导致样式错乱&#xff1b; 解决思路&#xff1a; 监听表格数据的变化&#xff0c;当表格出现滚动条时&#xff0c;再调用更新宽度的方法updateWidth&#xff0c;去改变表格头部的宽度&#xff0c;最终保持表格头部和内容对…

.NET中通过C#实现Excel与DataTable的数据互转

在.NET框架中&#xff0c;使用C#进行Excel数据与DataTable之间的转换是数据分析、报表生成、数据迁移等操作中的常见需求。这一过程涉及到将Excel文件中的数据读取并加载至DataTable中&#xff0c;以便于利用.NET提供的丰富数据处理功能进行操作&#xff0c;同时也包括将DataTa…

albert模型实现微信公众号虚假新闻分类

项目源码获取方式见文章末尾&#xff01; 600多个深度学习项目资料&#xff0c;快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【基于CNN-RNN的影像报告生成】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【GAN模型实现二次元头像生成】 4.【CNN模型实现…

java的JJWT 0.91在jdk21中报错的解决方法

参考了很多其他人的办法&#xff0c;只有这种方式可以解决问题 JSON Web Token&#xff08;缩写 JWT&#xff09; 目前最流行、最常见的跨域认证解决方案&#xff0c;前端后端都需要会使用的东西 如果根据黑马的视频&#xff0c;导入了阿里云OSS的相关依赖&#xff0c;自然不会…

最高提升20倍吞吐量!豆包大模型团队发布全新 RLHF 框架,现已开源!

文章来源&#xff5c;豆包大模型团队 强化学习&#xff08;RL&#xff09;对大模型复杂推理能力提升有关键作用&#xff0c;然而&#xff0c;RL 复杂的计算流程以及现有系统局限性&#xff0c;也给训练和部署带来了挑战。传统的 RL/RLHF 系统在灵活性和效率方面存在不足&#x…

云计算:定义、类型及对企业的影响

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 云计算&#xff1a;定义、类型及对企业的影响 云计算&#xff1a;定义、类型及对企业的影响 云计算&#xff1a;定义、类型及对企…

RSTP的配置

RSTP相对于STP在端口角色、端口状态、配置BPDU格式、配置BPDU的处理方式、快速收敛机制、拓扑变更机制和4种保护特性方面的详细改进说明&#xff1a; 端口角色&#xff1a; STP中定义了三种端口角色&#xff1a;根端口&#xff08;Root Port&#xff09;、指定端口&#xff0…

Fortran安装(vscode+gcc+Python)

编写时间&#xff1a; 2024年11月7日 环境配置&#xff1a; gcc VScode Python 条件&#xff1a; Windows 10 x64 VMware虚拟机 前言 这是我出的第2个关于Fortran安装的教程&#xff0c;由于上一个方法&#xff08;你可以在本专栏里找到&#xff09;对储存空间的要求比较…

Ubuntu18.04+ROS环境+moveit UR5机械臂仿真

目录 仿真环境&#xff1a; 1.下载Universal Robots机器人功能包 2.运行 Gazebo中的仿真模型 3.运行moveit运动规划 4.运行rviz并进行轨迹规划 仿真环境&#xff1a; 本文使用版本&#xff1a;Ubuntu18.04 ros版本&#xff1a;ros-melodic-desktop-full&#xff0c;安装…

华为路由策略配置

一、AS_Path过滤 要求&#xff1a; AR1与AR2、AR2与AR3之间建立EBGP连接 AS10的设备和AS30的设备无法相互通信 1.启动设备 2.配置IP地址 3.配置路由器的EBGP对等体连接&#xff0c;引入直连路由 [AR1]bgp 10 [AR1-bgp]router-id 1.1.1.1 [AR1-bgp]peer 200.1.2.2 as-nu…

echarts引入自定义字体不起作用问题记录

echarts引入自定义字体不起作用问题记录 1、问题描述 初始化界面字体不作用&#xff0c;当界面更新后字体样式正常显示 2、原因描述 这通常是由于字体文件加载延迟导致的。ECharts 在初始化时可能还没有加载完字体文件&#xff0c;因此无法正确应用字体样式 3、解决方案 …

Sql server 备份还原方法

备份 方法1&#xff0c;选择对应的数据库名-------》右键 任务---------》备份 默认备份类型 完整 文件后缀 .bak 方法2,选择对应的数据库名-------》右键 任务----------》生成脚本 选择要编写的数据库对象(表&#xff0c;视图&#xff0c;存储过程等) 选择对应的 服…

QT鼠标事件

QT鼠标事件 1.概述 这篇文章介绍如何使用事件和获取事件的信号 2.创建项目 创建一个widget类型项目&#xff0c;在widget.ui文件中添加一个label控件 然后在项目名称上右键选择Add new... 添加文件&#xff0c;选择 C Class 自定义类名Mylabel&#xff0c;选择基类Base …

【Android】webview常用方法和使用

文章目录 前言一、常见用法二、基础属性webView的常用方法WebViewClient的常用方法WebChromeClient的常用方法WebSettings的相关方法 三、加载流程和事件回调四、webview和JS之间的互相调用总结 五、参考链接 前言 最近项目又用到了webview&#xff0c;在回顾复习一次webview相…

malloc calloc和realloc区别和联系

malloc malloc是一个⼀个动态内存开辟的函数&#xff1a; 它的函数原型是void* malloc (size_t size);这个函数向内存申请⼀块连续可⽤的空间&#xff0c;并返回指向这块空间的指针。 1.如果开辟成功&#xff0c;则返回⼀个指向开辟好空间的指针。 2.如果如果开辟失败&#xf…

Android studio中关于printf和print和println的区别

print:为一般输出&#xff0c;同样不能保留精度格式转化&#xff0c;也不能换行输出&#xff0c;输出需要加上换行符printf:常用于格式转换&#xff0c;但需要注意不是换行输出&#xff0c;只用于精度转换&#xff0c;跟C语言的printf一样的&#xff0c;输出需要加上换行符prin…