java数据结构与算法刷题-----LeetCode633. 平方数之和

java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846

在这里插入图片描述

思路一:双指针

可以使用双指针,不断从两个方向匹配值。而两个数的平方和不能大于c。所以范围只需限制在[0, c \sqrt[]{c} c ], 注意:两个整数可以相等
在这里插入图片描述

class Solution {//时间复杂度O(根号c),空间复杂度O(1)public boolean judgeSquareSum(int c) {//双指针,因为任何数表示成两个比自己小的数的平方和时//都不可能大于自己的平方根,故,只需要从0到sqrt(c)即可//例如c=25, 5*5就已经25了,不可能有到6的情况,因为6*6=35已经比c大了long left = 0, right = (long)Math.sqrt(c);//long类型避免溢出while(left<=right){//左右指针,指向同一个值时,结束查找,表示没找着long sum = left*left + right*right;if(sum==c) return true;//如果找到返回trueelse if (sum>c) right--;//如果值太大,右边缩小else left++;//值太小,左边扩大}return false;//没找着返回false;}
}

思路二:费马平方和定理: 对于形如 p=4k+1 的素数 p,存在整数 x 和 y,使得 p = x 2 + y 2 p = x^2 + y^2 p=x2+y2 其中 x 和 y 是整数.

  1. 加粗样式
    在这里插入图片描述
class Solution {public boolean judgeSquareSum(int c) {for (int base = 2; base * base <= c; base++) {// 如果不是因子,枚举下一个if (c % base != 0) {continue;}// 计算 base 的幂int exp = 0;while (c % base == 0) {c /= base;exp++;}// 根据 Sum of two squares theorem 验证if (base % 4 == 3 && exp % 2 != 0) {return false;}}// 例如 11 这样的用例,由于上面的 for 循环里 base * base <= c ,base == 11 的时候不会进入循环体// 因此在退出循环以后需要再做一次判断return c % 4 != 3;}
}

刷题一定要坚持,总结套路,不单单要把题做出来,要举一反三,也要参考别人的思路,学习别人解题的优点,找出你觉得可以优化的点。

  1. 单链表解题思路:双指针、快慢指针、反转链表、预先指针
  1. 双指针:对于单链表而言,可以方便的让我们遍历结点,并做一些额外的事
  2. 快慢指针:常用于找链表中点,找循环链表的循环点,一般快指针每次移动两个结点,慢指针每次移动一个结点。
  3. 反转链表:通常有些题,将链表反转后会更好做,一般选用三指针迭代法,递归的空间复杂度有点高
  4. 预先指针:常用于找结点,比如找倒数第3个结点,那么定义两个指针,第一个指针先移动3个结点,然后两个指针一起遍历,当第一个指针遍历完成,第二个指针指向的结点就是要找的结点
  1. 数组解题思路:双指针、三指针,下标标记
  1. 双指针:多用于减少时间复杂度,快速遍历数组
  2. 三指针:多用于二分查找,分为中间指针,左和右指针
  3. 下标标记:常用于在数组范围内找东西,而不想使用额外的空间的情况,比如找数组长度为n,元素取值范围为[1,n]的数组中没有出现的数字,遍历每个元素,然后将对应下标位置的元素变为负数或者超出[1,n]范围的正数,最后没有发生变化的元素,就是缺少的值。

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

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

相关文章

IP代理科普| 共享IP还是独享IP?两者的区别与优势

通俗地讲&#xff0c;共享IP就像乘坐公共汽车一样&#xff0c;您可以到达目的地&#xff0c;但将与其他乘客共享旅程&#xff0c;座位很可能是没有的。独享IP就像坐出租车一样&#xff0c;您可以更快到达目的地&#xff0c;由于车上只有您一个人&#xff0c;座位是您一个人专用…

ComfyUI激活中文

comfyui中文地址如下&#xff1a; https://github.com/AIGODLIKE/AIGODLIKE-ComfyUI-Translationhttps://github.com/AIGODLIKE/AIGODLIKE-ComfyUI-Translation如何安装&#xff1f; 1. git安装 进入项目目录下的custom_nodes目录下&#xff0c;然后进入控制台&#xff0c;运…

获取京东商品信息:使用详情API的步骤与技巧

注册并登录京东开放平台&#xff1a;首先&#xff0c;你需要在京东开放平台上注册一个账号并获取必要的API凭证&#xff0c;如appkey和appsecret。构建请求URL&#xff1a;根据京东详情API的文档&#xff0c;确定需要查询的商品类目和商品ID。然后&#xff0c;使用适当的查询参…

近屿智能OJAC第六期AIGC星辰大海:大模型工程师与产品专家深度训练营已拉开序幕

您想成为AIGC大模型领域的佼佼者吗&#xff1f; 近屿智能OJAC第六期AIGC星辰大海&#xff1a;大模型工程师与产品专家深度训练营已拉开序幕&#xff0c;上千名学员已经实现转行、跳槽、升职、加薪&#xff0c;还不赶快行动起来&#xff0c;这是专为您量身定制的AI大模型学习之旅…

Git常用命令分享

Git常用命令分享 1. 初始化一个新的仓库 git init默认初始化的是master分支&#xff0c;如果想指定分支&#xff0c;使用下面命令&#xff1a; git init -b <branch_name>2.克隆一个仓库 git clone <repository_url>从远程仓库克隆代码到本地。 3. 配置 Git 用…

『CVE』简析CVE-2023-48795:SSH协议前缀截断攻击(Terrapin攻击)

文章目录 OpenSSH 9.6更新公告Terrapin攻击 (CVE-2023-48795)基本信息利用手段利用路径利用条件利用原理及示意图危害Terrapin-Scanner 基于Terrapin的潜在风险&#xff1a;CVE-2023-46445 & 46446参考完 OpenSSH 9.6更新公告 *ssh(1), sshd(8): implement protocol extens…

mysql的timestamp字段和serverTimezone的关系

1. mysql中timestamp字段类型的定义&#xff1a;表示从1970年1月1日0点0分1秒开始到存储时间之间的秒数&#xff0c;最高到2038年1月19号3点14分07秒 这个怎么理解呢&#xff1f;就是不管你当前的时区是什么&#xff0c;当你存入一个时间类型的数据的时候&#xff0c;mysql都会…

算法问题:最优二叉搜索树

给定一个序列 有n个有序且各不相同的键&#xff0c; 集合表示在K中成功的搜索的概率; 为n1 个不同的哑键&#xff0c;表示所有在和之间的值&#xff0c; 表示不成功的搜索的概率. 创建二叉搜索树&#xff0c; 使得其期望搜索花费最小。 一个例子 最优子结构 如果一棵最优二叉搜…

udp多播/组播那些事

多播与组播 多播&#xff08;multicast&#xff09;和组播&#xff08;groupcast&#xff09;是相同的概念&#xff0c;用于描述在网络中一对多的通信方式。在网络通信中&#xff0c;单播&#xff08;unicast&#xff09;是一对一的通信方式&#xff0c;广播&#xff08;broad…

某日某条完整逆向分析和数据抓取(最详细逆向实战教程,小白也能看懂)

大家好!我是爱摸鱼的小鸿,关注我,收看每期的编程干货。 本期文章将带你详细的逆向分析某日某条的URL加密参数,包括如何逆向分析、如何准确的找到加密入口、如何补JS环境、如何模拟执行JS,以及如何用网络劫持简单便捷的获取URL加密参数、接口监听的方式直接获取接口响应数据…

Mybatis如何兼容各类日志?

文章目录 适配器模式日志模块代理模式1、静态代理模式2、JDK动态代理 JDBC Logger总结 Apache Commons Logging、Log4j、Log4j2、java.util.logging 等是 Java 开发中常用的几款日志框架&#xff0c;这些日志框架来源于不同的开源组织&#xff0c;给用户暴露的接口也有很多不同…

边缘计算AI智能盒子的视频源必须是固定点监控摄像头吗?

边缘计算AI盒子的视频输入源&#xff0c;要求是RTSP或者GB28181&#xff0c;可以是固定点监控摄像头&#xff08;枪机、球机等&#xff09;&#xff0c;也可以是移动摄像头&#xff0c;例如执法记录仪、智能安全帽、布控球等&#xff0c;但由于RTSP输入要求摄像头有固定IP&…

使用 Postman 进行并发请求:实用教程与最佳实践

背景介绍 最近&#xff0c;我们发起了一个在线图书管理系统的项目。我负责的一个关键模块包括三个主要后台接口&#xff1a; 实现对books数据的检索。实施对likes数据的获取。通过collections端点访问数据。 应对高流量的挑战 在设计并部署接口时&#xff0c;我们不可避免地…

C语言初学8:函数和作用域

一、函数 函数声明告诉编译器函数的名称、返回值类型和参数。在一个源文件中定义函数且在另一个文件中调用函数时&#xff0c;函数声明是必需的。函数定义提供了函数的实际主体。

JavaScript力扣88题

splice方法&#xff1a;nums.splice(start,deletenum,newitem1,newitem2,new...); splice(铰接&#xff0c;捻接)&#xff1b;start&#xff1a;开始的位置&#xff0c;从1开始&#xff1b;deletenum,删除的数量&#xff1b;nuwitem1,...新添加的元素 代码示例&#xff1a; l…

西南科技大学计算机网络实验二 (IP协议分析与以太网协议分析)

一、实验目的 通过分析由跟踪执行traceroute程序发送和接收捕获得到的IP 数据报,深入研究在IP 数据报中的各种字段,理解IP协议。基于ARP命令和Ethereal进行以太网帧捕获与分析,理解和熟悉ARP协议原理以及以太网帧格式。 二、实验环境 与因特网连接的计算机网络系统;主机操…

编写第一个APP自动化脚本 appium_helloworld ,将脚本跑起来

一、前置说明 我们把学习 Appium 的第一个脚本称为 appium_helloworld&#xff0c;它用于展示 Appium 的基本用法&#xff0c;验证配置和环境是否正确。 Appium 自动化操作 APP 的基本流程&#xff08;Android平台&#xff09;&#xff1a; 启动 Appium Serveradb 连接设备&…

【ctf】whireshark流量分析之tcp_杂篇

目录 简介 常考 图片类 提取png.pcap&#xff08;常规&#xff09; 异常的流量分析&#xff08;*&#xff0c;特殊&#xff09; john-in-the-middle&#xff08;特殊&#xff09; ​编辑 zip类 1.pcap&#xff08;常规&#xff09; 方法1&#xff08;常规提取压缩包&…

[足式机器人]Part4 南科大高等机器人控制课 CH10 Bascis of Stability Analysis

本文仅供学习使用 本文参考&#xff1a; B站&#xff1a;CLEAR_LAB 笔者带更新-运动学 课程主讲教师&#xff1a; Prof. Wei Zhang 南科大高等机器人控制课 Ch10 Bascis of Stability Analysis 1. Background1.1 What is Stability Analysis1.2 General ODE Models for Dynamic…

Web前端VScode/Vue3/git/nvm/node开发环境安装

目录 1 基本配置 2 安装vscode 3 安装vue 4 配置bash 5 安装nvm 6 安装node 7 安装yarn 8 新建项目 9 运行helloworld 1 基本配置 本篇是为了做前端开发的环境而写。使用的操作系统是windows 10 64位 2 安装vscode 现在做vue和node基本就是vscode和webstorm&#x…