技巧类题目
目录
技巧类题目
136 只出现一次的数字
191 位1的个数
231. 2 的幂
169 多数元素
75 颜色分类 (双指针)
287. 寻找重复数
136 只出现一次的数字
给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。
这里就可以运用异或运算的性质:
一个数和它本身做异或运算结果为 0,即 a ^ a = 0;一个数和 0 做异或运算的结果为它本身,即 a ^ 0 = a。
对于这道题目,我们只要把所有数字进行异或,成对儿的数字就会变成 0,落单的数字和 0 做异或还是它本身,所以最后异或的结果就是只出现一次的元素。
class Solution {public int singleNumber(int[] nums) {int res = 0;for (int n : nums) {res ^= n; //落单的数字和 0 做异或还是它本身}return res;}
}
191 位1的个数
n & (n-1) 这个操作是算法中常见的,作用是消除数字 n 的二进制表示中的最后一个 1

不断消除数字 n 中的 1,直到 n 变为 0。
public class Solution {// 你需要将 n 视为一个无符号值public int hammingWeight(int n) {int res = 0; // 结果变量,用于存储1的个数 // 当 n 不为0时,继续循环while (n != 0) {// n & (n - 1) 每次操作都会将 n 的最右边的一个1置为0// 这一步可以消除最右边的一个1n = n & (n - 1); // 每次消除一个1,计数器加1res++;}// 返回1的个数return res;}
}
231. 2 的幂
给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。
如果存在一个整数 x 使得 n == 2(x) ,则认为 n 是 2 的幂次方。
一个数如果是 2 的指数,那么它的二进制表示一定只含有一个 1。
位运算 n&(n-1) 在算法中挺常见的,作用是消除数字 n 的二进制表示中的最后一个 1,用这个技巧可以判断 2 的指数。
- 2^0 = 1,二进制表示为 0001。
- 2^1 = 2,二进制表示为 0010。
- 2^2 = 4,二进制表示为 0100。
- 2^3 = 8,二进制表示为 1000。
class Solution {public boolean isPowerOfTwo(int n) {// 如果 n 小于等于 0,则 n 不是 2 的幂if (n <= 0) return false;// 位操作判断 n 是否是 2 的幂// 对于 2 的幂,二进制表示中只有一个 1,其余全是 0// 比如:2 (10), 4 (100), 8 (1000), 等等// n & (n - 1) 将会移除 n 最右边的 1,如果 n 是 2 的幂,结果将是 0// 例如:n = 8, 二进制表示为 1000// n - 1 = 7, 二进制表示为 0111// n & (n - 1) = 1000 & 0111 = 0000return (n & (n - 1)) == 0;}
}
169 多数元素
给定一个大小为 n的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于⌊ n/2 ⌋ 的元素。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
计数逻辑:
- 计数器为0:如果 count 为0,说明当前没有候选元素,或者之前的候选元素已经被其他元素抵消掉了。因此,更新 target 为当前元素,并将 count 设为1。
- 当前元素等于目标元素:如果当前元素 nums[i] 等于 target,说明当前元素依旧是多数元素的候选,计数器加1。
- 当前元素不等于目标元素:如果当前元素 nums[i] 不等于 target,说明遇到了一个不同的元素,计数器减1。
class Solution {public int majorityElement(int[] nums) {// 定义目标元素和计数器int target = 0;int count = 0;// 遍历数组for (int i = 0; i < nums.length; i++) {// 如果计数器为0,表示需要选择一个新的目标元素if (count == 0) {// 将当前元素设为目标元素target = nums[i];// 计数器重置为1count = 1;} else if (nums[i] == target) {// 如果当前元素等于目标元素,计数器加1count++;} else {// 如果当前元素不等于目标元素,计数器减1count--;}}// 返回最后确定的目标元素return target;}
}
75 颜色分类 (双指针)
给定一个包含红色、白色和蓝色、共 n个元素的数组 nums ,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。
我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。
必须在不使用库内置的 sort 函数的情况下解决这个问题。
class Solution {public void sortColors(int[] nums) {int n0 = 0, n1 = 0;// 遍历数组for (int i = 0; i < nums.length; i++) {int num = nums[i]; // 获取当前元素nums[i] = 2; // 默认将当前元素置为 2// 如果当前元素小于 2,则需要处理 1 的插入if (num < 2) {nums[n1++] = 1; // 将 1 插入到 n1 的位置,并将 n1 向前移动一位}// 如果当前元素小于 1,则需要处理 0 的插入 如果是0 前面设置过一次会被覆盖if (num < 1) {nums[n0++] = 0; // 将 0 插入到 n0 的位置,并将 n0 向前移动一位}}}
}
287. 寻找重复数
给定一个包含 n + 1 个整数的数组 nums ,其数字都在 [1, n] 范围内(包括 1 和 n),可知至少存在一个重复的整数。
假设 nums 只有 一个重复的整数 ,返回 这个重复的数 。
你设计的解决方案必须 不修改 数组 nums 且只用常量级 O(1) 的额外空间。
class Solution {public int findDuplicate(int[] nums) {// 使用快慢指针初始化指向数组的起始位置int slow = 0;int fast = 0;// 第一阶段:寻找快慢指针的相遇点// 这部分利用了快慢指针,其中快指针移动速度是慢指针的两倍do {slow = nums[slow]; // 慢指针移动一步fast = nums[nums[fast]]; // 快指针移动两步} while (slow != fast);// 此时 slow 和 fast 相遇,表明存在一个循环(环)// 第二阶段:找到环的入口,即重复的元素int a = 0; // a 从头开始int b = fast; // b 从相遇点开始while (a != b) {a = nums[a]; // a 和 b 同时以相同速度前进b = nums[b];}// 当 a 和 b 再次相遇时,相遇点即为环的入口,也就是重复的数字return a;}
}
相关文章:
技巧类题目
目录 技巧类题目 136 只出现一次的数字 191 位1的个数 231. 2 的幂 169 多数元素 75 颜色分类 (双指针) 287. 寻找重复数 136 只出现一次的数字 给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均…...
Vue3自定义指令参数修饰符值(3)
自定义指令参数修饰符值 在vue3中我们如何获取自定义的参数的内容,并根据业务来修改展示的内容呢,需要依靠mounted方法中的bindings参数来获取。 参考实例 directives/unit.js文件 export default function directiveUnit(app){app.directive("unit",{…...
HTML(23)——垂直对齐方式
垂直对齐方式 属性名:vertical-align 属性值效果baseline基线对齐(默认)top顶部对齐middle居中对齐bottom底部对齐 默认情况下浏览器对行内块,行内标签都按文字处理,默认基线对齐 导致图片看起来会偏上,文字偏下。 示例&#…...
linux查看二进制文件
在Linux中,查看二进制文件可以使用hexdump或xxd命令。 例如,要查看一个名为example.bin的二进制文件的内容,可以使用以下命令之一: 使用hexdump: bash hexdump -C example.bin使用xxd: bash xxd exam…...
营销翻车,杜国楹出面道歉,小罐茶的“大师作”故事仓皇结尾
“小罐茶,大师作”,这句slogan曾一度在央视平台长时间、高密度播放,成为家喻户晓的广告词,也打响了小罐茶品牌的名号。但同时,市场上关于“大师作”真实性的质疑也从未停息。 就在6月25日小罐茶十二周年发布会上&#…...
linux server下人脸检测与识别服务程序的系统架构设计
一、绪论 1.1 定义 1.2 研究背景及意义 1.3 相关技术综述 二、人脸检测与识别技术概述 2.1 人脸检测原理与算法 2.2 人脸识别技术及方法 2.3 人脸识别过程简介 三、人脸检测与识别服务程序的系统架构 3.1 系统架构设计 3.2 技术实现流程 四、后续设计及经验瞎谈 4.…...
安装CLion配置opencv和torch环境
配置操作如图,源码见底部附录部分 安装CLion 官网下载 创建项目 设置环境 调整类型为release 配置opencv和项目 编译环境 编译后 重启CLion 测试opencv环境 测试代码 运行main.cpp显示图片 测试torch环境 没标红表示配置成功 附件 CMakeList.txt cmake_mi…...
[leetcode]number-of-longest-increasing-subsequence
. - 力扣(LeetCode) class Solution { public:int findNumberOfLIS(vector<int> &nums) {int n nums.size(), maxLen 0, ans 0;vector<int> dp(n), cnt(n);for (int i 0; i < n; i) {dp[i] 1;cnt[i] 1;for (int j 0; j < i…...
[MYSQL] MYSQL库的操作
前言 本文主要介绍MYSQL里 库 的操作 请注意 : 在MYSQL中,命令行是不区分大小写的 1.创建库 create database [if not exists] database_name [charsetutf8 collateutf8_general_ci] ...] create database 是命名语法,不可省略[if not exists] 如果不存在创建,如果存在跳过…...
数字黄金 vs 全球计算机:比特币与以太坊现货 ETF 对比
撰文:Andrew Kang 编译:J1N,Techub News 本文来源香港Web3媒体:Techub News 比特币现货 ETF 的通过为许多新买家打开了进入加密货币市场的大门,让他们可以在投资组合中配置比特币。但以太坊现货 ETF 的通过…...
互联网直播/点播技术与平台创新应用:视频推拉流EasyDSS案例分析
随着互联网技术的快速发展,直播/点播平台已成为信息传播和娱乐的重要载体。特别是在电视购物领域,互联网直播/点播平台与技术的应用,不仅为用户带来了全新的购物体验,也为商家提供了更广阔的营销渠道。传统媒体再一次切实感受到了…...
怎么在线电脑上做图片二维码?在线3步图片转活码的制作方法
图片怎么才能做成二维码展示呢?图片生成二维码的方式能够在手机上查看图片,有利于图片的快速分享,通过这种方法能够减少对内存的占用,也提高了用户获取图片的便利性。通过生成图片活码能够不断提供最新的图片给用户展示࿰…...
lighttpd安装和配置https
apt install lighttpd apt-get install php-cgi lighttpd-enable-mod fastcgi fastcgi-php service lighttpd force-reload lighttpd配置https sudo nano /etc/lighttpd/lighttpd.conf加入: server.modules ("mod_openssl") $SERVER["socket&quo…...
淘客返利平台的API设计与安全
淘客返利平台的API设计与安全 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 在构建淘客返利平台时,API设计和安全是两个至关重要的方面。API设计…...
SQL面试真题解答 SQL求连续五天上升 (SQL窗口函数使用)
SQL面试真题解答 SQL求连续五天上升 (SQL窗口函数使用) sql进阶:求某个日期的连续上涨天数 求解连续区间是数据分析、数据仓库笔试面试中常考的SQL题目,今天分享笔试面试题,期待各位拿到心仪的offer或有所收获! 一…...
39 - 安全技术与防火墙
39、安全技术和防火墙 一、安全技术 入侵检测系统:特点是不阻断网络访问,主要是提供报警和事后监督。不主动介入,默默看着你(监控)。 入侵防御系统:透明模式工作,数据包,网络监控…...
Python学习笔记26:进阶篇(十五)常见标准库使用之性能测试cProfile模块学习使用
前言 本文是根据python官方教程中标准库模块的介绍,自己查询资料并整理,编写代码示例做出的学习笔记。 根据模块知识,一次讲解单个或者多个模块的内容。 教程链接:https://docs.python.org/zh-cn/3/tutorial/index.html 本文主要…...
python中类的继承详解
面向对象编程 (OOP) 语言的一个主要功能就是“继承”。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展 (1)在类的继承中,存在父类跟子类,子类可以继…...
社交风潮塑造者:探索用户在Facebook的影响力
在当今数字化社会中,Facebook不仅是人们社交互动的主要平台,更是塑造社交风潮和文化趋势的重要力量。本文将从另一个角度深入探讨用户在Facebook上的影响力,探索其如何通过个人行为和互动,影响和改变社会的各个方面。 个人表达和内…...
Kotlin设计模式:代理模式详解
Kotlin设计模式:代理模式详解 在软件开发中,设计模式是解决常见问题的一种优雅方法。本文将介绍Kotlin中的代理模式(Proxy Pattern),其应用场景,以及如何通过实例代码实现这一模式。 代理模式的目的 代理…...
颠覆传统:3倍效率提升的Markdown到PPT智能转换解决方案
颠覆传统:3倍效率提升的Markdown到PPT智能转换解决方案 【免费下载链接】md2pptx Markdown To PowerPoint converter 项目地址: https://gitcode.com/gh_mirrors/md/md2pptx 通过创新解析引擎与模板系统,实现技术文档到演示文稿的自动化转换&…...
DepthAnything(4): 基于TensorRT在Jetson平台实现DepthAnything模型的高效部署与性能优化
1. 为什么要在Jetson上部署DepthAnything? DepthAnything作为通用深度估计模型,能够处理各种复杂场景下的图像深度信息提取。但在边缘设备上直接运行原始PyTorch模型往往会遇到性能瓶颈,特别是Jetson这类资源受限的平台。我去年在Jetson Xavi…...
qmc-decoder:释放被锁住的音乐宝藏,让QQ音乐文件重获自由
qmc-decoder:释放被锁住的音乐宝藏,让QQ音乐文件重获自由 【免费下载链接】qmc-decoder Fastest & best convert qmc 2 mp3 | flac tools 项目地址: https://gitcode.com/gh_mirrors/qm/qmc-decoder 你是否曾有过这样的体验?在QQ音…...
告别重复编码:用快马AI为clowdbot自动生成状态管理与API集成模块,效率翻倍
最近在优化我的聊天机器人项目clowdbot时,我遇到了一个典型的开发瓶颈:随着对话逻辑越来越复杂,我需要编写大量重复的、结构类似的代码。比如,管理用户在多轮对话中的状态、调用各种外部API(天气、翻译等)、…...
GPT-SoVITS应用教程:打造个人数字人,让你的虚拟形象开口说话
GPT-SoVITS应用教程:打造个人数字人,让你的虚拟形象开口说话 1. 什么是GPT-SoVITS? GPT-SoVITS 是一个开源的文本到语音(TTS)和语音转换模型,它结合了 GPT 的生成能力和 SoVITS 的语音转换技术。这个项目…...
wkhtmltopdf跨平台部署与实战应用指南
1. 初识wkhtmltopdf:为什么选择它? 如果你正在寻找一款能将HTML完美转换为PDF的工具,wkhtmltopdf绝对值得你深入了解。我第一次接触这个工具是在五年前的一个企业报表项目中,当时我们需要将动态生成的网页内容转换为格式严谨的PDF…...
NEC红外协处理器模块:UART接口红外编解码方案
1. 红外解码编码模块技术解析与工程实现红外通信作为最成熟、成本最低的短距离无线控制技术之一,在消费电子领域已应用数十年。NEC协议因其结构清晰、抗干扰能力强、实现简单等特点,成为家电遥控器事实上的工业标准。本模块并非传统意义上的MCU裸机红外驱…...
GME多模态向量模型在Java微服务架构中的应用:构建跨模态搜索中间件
GME多模态向量模型在Java微服务架构中的应用:构建跨模态搜索中间件 最近和几个做电商和内容平台的朋友聊天,他们都在头疼同一个问题:用户现在不仅用文字搜商品、搜内容,还喜欢直接上传一张图片来找相似款,或者发一段语…...
造相Z-Image v2镜像体验:一键访问Web界面,快速生成测试图片
造相Z-Image v2镜像体验:一键访问Web界面,快速生成测试图片 1. 开箱即用的AI绘画体验 想快速体验专业级AI图像生成却苦于复杂的部署流程?造相Z-Image v2镜像提供了完美的解决方案。这个由阿里通义万相团队开发的文生图模型,经过…...
Qwen3-TTS-12Hz-1.7B-CustomVoice实战:Vue3前端集成语音合成功能
Qwen3-TTS-12Hz-1.7B-CustomVoice实战:Vue3前端集成语音合成功能 最近在做一个需要语音播报功能的前端项目,后台同事推荐了Qwen3-TTS这个开源语音合成模型。说实话,刚开始听到“1.7B参数”、“12Hz编码”这些术语时,我心里是有点…...
