LeetCode 2501 数组中最长的方波 Java

news/2024/12/2 17:42:48/

在这里插入图片描述
方法一,哈希表+枚举

  1. 构造哈希集合,记录出现过的数字
  2. 枚举遍历
import java.util.HashSet;
import java.util.Set;class Solution {public int longestSquareStreak(int[] nums) {//构造哈希表集合,记录出现过的数字,转long型,避免求平方后int越界Set<Long> set = new HashSet<>();for (long num : nums) {set.add(num);}int maxLen = -1;//直接枚举,依据题意找到了子序列后从小到达排序,因此无需排序,无需判断索引大小for (long num : nums) {int subLen = 1;num *= num;//若包含平方数,继续枚举while (set.contains(num)) {subLen++;num *= num;}//更新最值,子序列的长度至少为2if (subLen > 1 && subLen > maxLen) {maxLen = subLen;}}return maxLen;}
}

在这里插入图片描述
方法二,排序+二分

  1. 先排序
  2. 遍历时,如果nums[i]*nums[i]>nums[n-1]时,可以直接跳出循环
  3. 在查找是否存在当前值的平方时,可以采用二分法查找,因为只需要查找是否存在,所以可以用库函数Arrays.binarySearch(int[] nums, int target),返回值idx小于0,表示不存在
import java.util.Arrays;class Solution {public int longestSquareStreak(int[] nums) {int n = nums.length;Arrays.sort(nums);int ans = -1;for (int i = 0; i < n; i++) {if (nums[i] * nums[i] > nums[n - 1]) {break;}int idx = i, cnt = 0;while (idx >= 0) {idx = Arrays.binarySearch(nums, nums[idx] * nums[idx]);if (idx >= 0) {cnt++;}}ans = Math.max(ans, cnt + 1);}return ans > 1 ? ans : -1;}
}

在这里插入图片描述


http://www.ppmy.cn/news/681461.html

相关文章

房贷计算器——新增选择还款方式

房贷计算器——新增选择还款方式 #!/usr/bin/env python # coding: utf-8# In[4]: 文字‘房贷计算器’ 文字‘贷款总金额’&#xff1a;输入框 文字‘贷款期限’&#xff1a;输入框 文字‘年利率’&#xff1a;输入框 按钮‘开始计算’ 返回&#xff1a; 月供 总利息 from tki…

谈高考志愿填报

目录 不如先说说我自己。 一、选专业还是选学校&#xff1a; 二、你想推荐/避雷的专业&#xff1a; 三、填报志愿的策略&#xff1a; 四、影响专业选择的因素&#xff1a; 各省高考成绩已出&#xff0c;又到一年高考季。张雪峰提到&#xff1a;“普通家庭不要光谈理想&…

Java——《面试题——设计模式篇》

前文 java——《面试题——基础篇》 Java——《面试题——JVM篇》 Java——《面试题——多线程&并发篇》 Java——《面试题——Spring篇》 Java——《面试题——SpringBoot篇》 Java——《面试题——MySQL篇》​​​​​​ Java——《面试题——SpringCloud》 Java…

redis修改密码

redis修改密码有两种方法 一、直接在redis-cli修改 首先登陆redis &#xff08;无密码&#xff09;-h 127.0.0.1 -p 6379 (已有密码)auth [password] 查看当前密码 config get requirepass 修改密码 config set requirepass &#xff08;这种方式重启服务后密码就重置…

mac里mysql8.0.16版本修改密码

在终端执行下面两条指令 alias mysqladmin/usr/local/bin/mysqladminalias mysql/usr/local/bin/mysqlsudo mysql进入mysql use mysql; 执行下面指令修改密码。 ALTER USER rootlocalhost IDENTIFIED WITH mysql_native_password BY你的密码;用你的密码登录mysql。

【git修改密码】

git修改密码 查看用户名 &#xff1a;git config user.name 查看密码&#xff1a; git config user.password 查看邮箱&#xff1a;git config user.email 查看配置信息&#xff1a; $ git config --list 修改用户名 git config --global user.name “xxxx(新的用户名)” …

MySQL8修改密码

备份一下&#xff0c;免得以后找不到 原文&#xff1a;MySQL8修改密码步骤_才华抛物线19的博客-CSDN博客_mysql8修改密码 一、免密登录&#xff1a; 1、修改mysql配置文件&#xff08;配置文件位置&#xff1a;/etc/my.cnf &#xff09;&#xff0c;在配置文件中添加一行&am…

Linux root密码修改

作者&#xff1a;技术工程师–陈锐锐 前言&#xff1a;最近遇到有将自己root密码忘记的情况&#xff0c;这里总结一下root密码修改的几种方法&#xff0c;仅供参考。 一、Linux 6.x以及以下版本 1.重启系统&#xff0c;按e进入如下模式 再次按e进入如图模式&#xff08;选中…