热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

2022416Leetcode633.平方数之和

第一版,使用双指针,但是造成了溢出。classSolution{public:booljudgeSquareSum(intc){vector

在这里插入图片描述
第一版,使用双指针,但是造成了溢出。
在这里插入图片描述

class Solution {
public:bool judgeSquareSum(int c) {vector<int> arr(c&#43;1);for(int i &#61; 0;i < c&#43;1;i&#43;&#43;){arr[i] &#61; i;}int l &#61; 0;int r &#61; c;while(l <&#61; r){unsigned long long int num &#61; arr[l] * arr[l] &#43; arr[r] * arr[r];if(num &#61;&#61; c){return true;}else if(num > c){r--;}else {l&#43;&#43;;}}return false;}
};

主要是需要使用sqrt 来防止溢出和降低时间复杂度。

第二版&#xff0c;依然会溢出。
Line 11: Char 43: runtime error: signed integer overflow: 829921 &#43; 2146654224 cannot be represented in type ‘int’ (solution.cpp)
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior prog_joined.cpp:20:43

class Solution {
public:bool judgeSquareSum(int c) {int a &#61; sqrt(c);vector<int> arr(a&#43;1);for(int i &#61; 0;i < arr.size();i&#43;&#43;){arr[i] &#61; i;}int l &#61; 0,r &#61; a;while(l <&#61; r){long long num &#61; arr[l]*arr[l] &#43; arr[r]*arr[r];if(num &#61;&#61; c){return true;}else if(num > c){r--;}else{l&#43;&#43;;}}return false;}
};

第三版&#xff0c;将数组换成了long

class Solution {
public:bool judgeSquareSum(int c) {long a &#61; sqrt(c);vector<long> arr(a&#43;1);for(int i &#61; 0;i < arr.size();i&#43;&#43;){arr[i] &#61; i;}int l &#61; 0,r &#61; a;while(l <&#61; r){long long num &#61; arr[l]*arr[l] &#43; arr[r]*arr[r];if(num &#61;&#61; c){return true;}else if(num > c){r--;}else{l&#43;&#43;;}}return false;}
};

看了下官方答案&#xff0c;发现没有必要使用数组

class Solution {
public:bool judgeSquareSum(int c) {long left &#61; 0;long right &#61; (int)sqrt(c);while (left <&#61; right) {long sum &#61; left * left &#43; right * right;if (sum &#61;&#61; c) {return true;} else if (sum > c) {right--;} else {left&#43;&#43;;}}return false;}
};作者&#xff1a;LeetCode-Solution
链接&#xff1a;https://leetcode-cn.com/problems/sum-of-square-numbers/solution/ping-fang-shu-zhi-he-by-leetcode-solutio-8ydl/
来源&#xff1a;力扣&#xff08;LeetCode&#xff09;
著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。

推荐阅读
  • 在高并发需求的C++项目中,我们最初选择了JsonCpp进行JSON解析和序列化。然而,在处理大数据量时,JsonCpp频繁抛出异常,尤其是在多线程环境下问题更为突出。通过分析发现,旧版本的JsonCpp存在多线程安全性和性能瓶颈。经过评估,我们最终选择了RapidJSON作为替代方案,并实现了显著的性能提升。 ... [详细]
  • 深入解析MySQL中的七种JOIN查询
    本文详细介绍了MySQL中常用的七种JOIN查询方法,包括内连接、左外连接、右外连接、全外连接以及排除连接等,并通过实例进行说明。 ... [详细]
  • 本文探讨了如何在Classic ASP中实现与PHP的hash_hmac('SHA256', $message, pack('H*', $secret))函数等效的哈希生成方法。通过分析不同实现方式及其产生的差异,提供了一种使用Microsoft .NET Framework的解决方案。 ... [详细]
  • Java多线程实现:从1到100分段求和并汇总结果
    本文介绍如何使用Java编写一个程序,通过10个线程分别计算不同区间的和,并最终汇总所有线程的结果。每个线程负责计算一段连续的整数之和,最后将所有线程的结果相加。 ... [详细]
  • 主调|大侠_重温C++ ... [详细]
  • 本文介绍了 Python 的 Pmagick 库中用于图像处理的木炭滤镜方法,探讨其功能和用法,并通过实例演示如何应用该方法。 ... [详细]
  • 由二叉树到贪心算法
    二叉树很重要树是数据结构中的重中之重,尤其以各类二叉树为学习的难点。单就面试而言,在 ... [详细]
  • JavaScript中的数组是数据集合的核心结构之一,内置了多种实用的方法。掌握这些方法不仅能提高开发效率,还能显著提升代码的质量和可读性。本文将详细介绍数组的创建方式及常见操作方法。 ... [详细]
  • 本文探讨了符号三角形问题,该问题涉及由相同数量的“+”和“-”符号组成的三角形。通过递归回溯法,可以有效地搜索并计算符合条件的符号三角形的数量。 ... [详细]
  • 本题要求在一组数中反复取出两个数相加,并将结果放回数组中,最终求出最小的总加法代价。这是一个经典的哈夫曼编码问题,利用贪心算法可以有效地解决。 ... [详细]
  • 本文详细介绍了C语言中的基本数据类型,包括整型、浮点型、字符型及其各自的子类型,并探讨了这些类型在不同编译环境下的表现。 ... [详细]
  • 软件工程课堂测试2
    要做一个简单的保存网页界面,首先用jsp写出保存界面,本次界面比较简单,首先是三个提示语,后面是三个输入框,然 ... [详细]
  • 本文旨在探讨如何利用决策树算法实现对男女性别的分类。通过引入信息熵和信息增益的概念,结合具体的数据集,详细介绍了决策树的构建过程,并展示了其在实际应用中的效果。 ... [详细]
  • KMP算法是处理字符串匹配的一种高效算法它首先用O(m)的时间对模板进行预处理,然后用O(n)的时间完成匹配。从渐进的意义上说,这样时间复 ... [详细]
  • 本文详细介绍了Java库XChart中的XYSeries类下的setLineColor()方法,并提供了多个实际应用场景的代码示例。 ... [详细]
author-avatar
今天是星期天嘛_512
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有