当前位置: 首页 > news >正文

LeetCode题练习与总结:4的幂--342

一、题目描述

给定一个整数,写一个函数来判断它是否是 4 的幂次方。如果是,返回 true ;否则,返回 false 。

整数 n 是 4 的幂次方需满足:存在整数 x 使得 n == 4^x

示例 1:

输入:n = 16
输出:true

示例 2:

输入:n = 5
输出:false

示例 3:

输入:n = 1
输出:true

提示:

  • -2^31 <= n <= 2^31 - 1

二、解题思路

要判断一个整数是否是 4 的幂次方,我们可以利用以下性质:

  1. 4 的幂次方一定是正数。
  2. 4 的幂次方的二进制表示中,只有一个 1,且这个 1 出现在奇数位置上(从右边开始计数,第 1、3、5、… 位)。

基于以上性质,我们可以采用以下步骤进行判断:

  1. 首先判断 n 是否大于 0,如果不大于 0,直接返回 false。
  2. 然后判断 n 的二进制表示中是否只有一个 1。这可以通过 n & (n - 1) 来判断,如果结果为 0,说明 n 只有一个 1。
  3. 最后判断这个 1 是否出现在奇数位置上。可以通过与一个特殊的数进行按位与操作来判断,这个特殊的数是一个只在奇数位置上为 1 的数,例如 0x55555555(十六进制)。

三、具体代码

class Solution {public boolean isPowerOfFour(int n) {// 0x55555555 是一个特殊的数,它的二进制表示为:01010101010101010101010101010101// 只在奇数位置上有 1,可以用来判断 4 的幂次方的 1 是否在奇数位置上return n > 0 && (n & (n - 1)) == 0 && (n & 0x55555555) != 0;}
}

这段代码首先判断 n 是否大于 0,然后通过 n & (n - 1) 判断 n 是否只有一个 1,最后通过 n & 0x55555555 判断这个 1 是否在奇数位置上。如果这三个条件都满足,则 n 是 4 的幂次方。

四、时间复杂度和空间复杂度

1. 时间复杂度

在这个函数中,我们执行了以下操作:

  • n > 0:这是一个常数时间的比较操作,时间复杂度为 O(1)。
  • (n & (n - 1)) == 0:这是一个位操作,它会持续执行直到 n 变为 0。在最坏的情况下,n 是 2 的幂次方但不是 4 的幂次方,那么这个操作会执行 log2(n) 次(因为每次操作都会移除 n 的最低位的 1),所以这个操作的时间复杂度是 O(log n)。
  • (n & 0x55555555) != 0:这是一个按位与操作,它也是常数时间操作,时间复杂度为 O(1)。

由于这些操作是顺序执行的,所以整个函数的时间复杂度取决于最耗时的操作,即 O(log n)。

2. 空间复杂度

在这个函数中:

  • 我们没有使用任何额外的数据结构(如数组、集合、栈等)。
  • 我们只使用了几个整型变量 n(n - 1) 和 0x55555555,这些变量占用的空间是常数。

因此,空间复杂度为 O(1),表示算法的额外空间需求不随输入规模增长而增长。

五、总结知识点

  • 位操作符(Bitwise Operators):

    • &(按位与操作符):用于比较两个整数的二进制表示,只有在两个比较位都为 1 时,结果位才为 1。
    • -(减法操作符):用于计算两个数的差,这里用于 (n - 1)
  • 逻辑操作符(Logical Operators):

    • >(大于操作符):用于比较两个数的大小。
    • ==(等于操作符):用于比较两个数的值是否相等。
    • !=(不等于操作符):用于比较两个数的值是否不相等。
    • &&(逻辑与操作符):用于连接两个布尔表达式,只有两个表达式都为 true 时,结果才为 true。
  • 特殊数值:

    • 0x55555555:这是一个十六进制常量,其二进制表示为 01010101010101010101010101010101,这个数值用于检测一个数的二进制表示中 1 的位置是否只在奇数索引上。
  • 整数与二进制表示:

    • 整数在计算机中是以二进制形式存储的,代码中的位操作是基于整数的二进制表示进行的。
  • 递归下降:

    • (n & (n - 1)) == 0 这个操作可以看作是一种递归下降的过程,每次操作都会将 n 的最低位的 1 置为 0,直到 n 变为 0。

以上就是解决这个问题的详细步骤,希望能够为各位提供启发和帮助。

相关文章:

LeetCode题练习与总结:4的幂--342

一、题目描述 给定一个整数&#xff0c;写一个函数来判断它是否是 4 的幂次方。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 整数 n 是 4 的幂次方需满足&#xff1a;存在整数 x 使得 n 4^x 示例 1&#xff1a; 输入&#xff1a;n 16 输出&am…...

ubuntu GLEW could not be initialized : Unknown error

原因 某些ubuntu版本默认使用wayland协议&#xff0c;glew不支持 解决方法 1、编辑GDM3配置文件 sudo nano /etc/gdm3/custom.conf 2、修改配置文件 去掉#WaylandEnablefalse前的# 3、重启GDM3服务 sudo systemctl restart gdm3 修改后默认使用X11协议。...

51c~目标检测~合集1

我自己的原文哦~ https://blog.51cto.com/whaosoft/12371248 #目标检测x1 又一个发现 都不知道是第几了 是一个高效的目标检测 动态候选较大程度提升检测精度 目标检测是一项基本的计算机视觉任务&#xff0c;用于对给定图像中的目标进行定位和分类。 论文地址&#xff1a…...

前端工程化面试题

说一下模块化方案 模块化是为了解决代码的复用和组织问题&#xff0c;可以说有了模块化才让前端有了工程的概念&#xff0c;模块化要解决两大问题 代码隔离和依赖管理&#xff0c;从node.js最早发布的commonjs 到浏览器端的 AMD,CMD 规范以及兼容的 UMD 规范&#xff0c;再到现…...

【Visual Studio】下载安装 Visual Studio Community 并配置 C++ 桌面开发环境的图文教程

引言 Visual Studio 是一个面向 .NET 和 C 开发人员的综合性 Windows 版 IDE&#xff0c;可用于构建 Web、云、桌面、移动应用、服务和游戏。 安装步骤 访问 Visual Studio 的官方下载页面&#xff1a; https://visualstudio.microsoft.com/zh-hans/downloads/运行已下载的 V…...

010Editor:十六进制编辑器

介绍 世界上最好的十六进制编辑器和出色的文本编辑器 010 Editor 是用于处理文本和二进制数据的终极工具包。 添加模板 模板库https://www.sweetscape.com/010editor/repository/templates/ 先下载一个ELF 模板 运行模板...

Vscode中Github Copilot无法使用

现象 Copilot侧边栏显示要登录&#xff0c;但是点击"github登录"没有反应与Copilot对话&#xff0c;报错如下&#xff1a; Unexpected token o, "[object Rea"... is not valid JSON解决方案 在网上怎么找都没找到类似的问题&#xff0c;最后发现是Vsco…...

<项目代码>YOLOv8表情识别<目标检测>

YOLOv8是一种单阶段&#xff08;one-stage&#xff09;检测算法&#xff0c;它将目标检测问题转化为一个回归问题&#xff0c;能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法&#xff08;如Faster R-CNN&#xff09;&#xff0c;YOLOv8具有更高的…...

利用Msfvenom实现对Windows的远程控制

1.实验准备 kali安装 Apache2&#xff08;如果尚未安装&#xff09;&#xff1a; sudo apt install apache2 启动 Apache2 服务&#xff1a; sudo systemctl start apache2确认 Apache2 的默认网页可以访问&#xff1a; 打开浏览器并访问 http://<你的Kali IP>&#xff…...

Java Iterator和for区别详解和常见问题及解决方式

在 Java 中&#xff0c;Iterator 是一个用于遍历集合元素的接口。它为访问集合中的元素提供了一种标准的方法&#xff0c;不管具体集合的实现如何。本文将详细讲解 Iterator 的使用、其与 for 循环的区别&#xff0c;以及在遍历集合时的删除操作可能带来的问题&#xff0c;并提…...

川渝地区软件工程考研择校分析

C哥专业提供——计软考研院校选择分析专业课备考指南规划 通过最新数据分析,5所高校软件工程专业2025年考研难度从高到低预计为: 电子科技大学 >> 四川大学 > 重庆大学 ≈ 西南交通大学 > 西南大学 对于想考川渝地区985但核心目标为优先上岸的考生,建议重点考虑西…...

快捷键记忆

快捷键记忆 文章目录 快捷键记忆前言一、PotPlayer快捷键二、电脑快捷键总结 前言 提示&#xff1a;以下是本篇文章正文内容&#xff1a; 一些软件的快捷键经常忘记&#xff0c;写这篇文章的目的是帮助我忘记的时候来查看。 顺序实时更新&#xff1a; 一、PotPlayer快捷键 Po…...

Flutter鸿蒙next 状态管理高级使用:深入探讨 Provider

✅近期推荐&#xff1a;求职神器 https://bbs.csdn.net/topics/619384540 &#x1f525;欢迎大家订阅系列专栏&#xff1a;flutter_鸿蒙next &#x1f4ac;淼学派语录&#xff1a;只有不断的否认自己和肯定自己&#xff0c;才能走出弯曲不平的泥泞路&#xff0c;因为平坦的大路…...

JMeter实战之——模拟登录

本篇介绍使用JMeter 如何对需要登录的站点进行压力测试。 基本Session验证的机制 使用session进行请求验证的机制是一种常见的Web应用认证方式。 该认证方式的主要内容如下&#xff1a; 一、登录过程 用户输入&#xff1a;用户在登录页面输入用户名和密码。发送请求&#x…...

智能台灯设计(一)原理图设计

1. 前言 作者最近突发奇想&#xff0c;想自己做一个小台灯&#xff0c;设想的功能有&#xff1a;带锂电池可充电、可以调节亮度&#xff0c;后续通过增加WIFI模块实现手机控制开关功能。目前先实现最简单的功能&#xff0c;有时间再一步步完善吧。 2. 原理图设计 充电芯片使用…...

数据库查询返回结果集及其元数据信息:ResultSet 和 ResultSetMetaData 深度解析

全文目录&#xff1a; 开篇语&#x1f4cc; 目录&#x1f31f; 前言&#x1f4dd; 摘要&#x1f4da; 简介&#x1f50d; 概述&#x1f9e9; 核心源码解读1️⃣ 创建数据库连接2️⃣ 执行查询获取结果集3️⃣ 读取查询数据4️⃣ 获取元数据信息 &#x1f4bb; 案例分析&#x1…...

2.插入排序(斗地主起牌)

一、思想 扑克牌起牌 代码&#xff1a; 二、时间复杂度&#xff1a; 最好情况&#xff08;已经排序好的&#xff09;&#xff1a;T O(N) 最坏情况&#xff08;完全逆序&#xff09;&#xff1a;T O(N^2) 三、优劣&#xff1a; 严格的大小比较之后才进行错位插入&#x…...

漫谈编程小白如何成为大神:夯实基础,开启通神之路

在当今数字化时代&#xff0c;编程已成为一项基本技能&#xff0c;对于大学新生而言&#xff0c;掌握编程能力不仅能够为学术研究提供支持&#xff0c;还能为未来的职业生涯开辟广阔天地。然而&#xff0c;面对琳琅满目的编程语言和学习资源&#xff0c;新生们往往会感到迷茫和…...

基于机器学习的个性化电影推荐系统【源码+安装+讲解+售后+文档】

【1】系统介绍 研究背景 随着互联网技术的迅速发展&#xff0c;数字娱乐内容特别是电影和电视剧的数量急剧增加。用户在享受丰富内容的同时&#xff0c;也面临着选择困难的问题&#xff0c;即“信息过载”。传统的搜索和分类方法已经无法满足用户日益增长的个性化需求。与此同…...

企业如何配合好等级保护测评工作?

企业如何配合好等级保护测评工作&#xff0c;是一个涉及多方面因素的系统性任务。等级保护测评&#xff0c;简称等保测评&#xff0c;是中国对信息和信息系统安全的重要管理手段和评估制度。通过这一制度&#xff0c;企业可以全面了解其信息系统的安全状况&#xff0c;及时发现…...

7.4.分块查找

一.分块查找的算法思想&#xff1a; 1.实例&#xff1a; 以上述图片的顺序表为例&#xff0c; 该顺序表的数据元素从整体来看是乱序的&#xff0c;但如果把这些数据元素分成一块一块的小区间&#xff0c; 第一个区间[0,1]索引上的数据元素都是小于等于10的&#xff0c; 第二…...

java_网络服务相关_gateway_nacos_feign区别联系

1. spring-cloud-starter-gateway 作用&#xff1a;作为微服务架构的网关&#xff0c;统一入口&#xff0c;处理所有外部请求。 核心能力&#xff1a; 路由转发&#xff08;基于路径、服务名等&#xff09;过滤器&#xff08;鉴权、限流、日志、Header 处理&#xff09;支持负…...

python打卡day49

知识点回顾&#xff1a; 通道注意力模块复习空间注意力模块CBAM的定义 作业&#xff1a;尝试对今天的模型检查参数数目&#xff0c;并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎&#xff1a;品融电商&#xff0c;一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中&#xff0c;品牌如何破浪前行&#xff1f;自建团队成本高、效果难控&#xff1b;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统&#xff0c;可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析&#xff1a;自动解析Markdown文档结构PPT模板分析&#xff1a;分析PPT模板的布局和风格智能布局决策&#xff1a;匹配内容与合适的PPT布局自动…...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控&#xff0c;故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令&#xff1a;jps [options] [hostid] 功能&#xff1a;本地虚拟机进程显示进程ID&#xff08;与ps相同&#xff09;&#xff0c;可同时显示主类&#x…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分&#xff1a; 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...