01 位运算

12days 

章节结构

00 算法前导课-编程基础(自学的视频)

01 位运算的奇巧淫技

02 查找与排序(上)

03 数组、查找与排序(下)

04 多维数组与矩阵

05 字符串专题

06 基本数学问题

06 递归、DFS、剪枝、回溯等问题

07 贪心策略与动态规划

08 线性结构:列表、链表、栈、队列

09 哈希表、哈希映射

10 树结构

11 图论

推荐书籍

《程序员面试金典》【cc150 :crack the code of interview】、《挑战程序设计竞赛》、《程序员代码面试指南》、《剑指offer》、《编程之美》、《算法导论》

学习方法

多敲多理解多复习

位运算与进制基础

进制基础:

        十进制、二进制、八进制、十六进制(A-F代表10-15)

进制转换方法:

        十转二、二转十、二转八、八转二、二转十六、十六转二

位运算:

        按位与(&)、按位或(|)、按位异或(^)、按位取反(~)

        左移(<<)、右移(>>)

判断奇偶数

使用&运算

// 判断一个数是奇数还是偶数
public class BitwiseTricks {// 方法:判断奇偶数public static boolean isEven(int num) {// 与1进行按位与操作,如果结果为0,则是偶数,否则是奇数return (num & 1) == 0;}public static void main(String[] args) {int num1 = 10; int num2 = 7;System.out.println(num1 + " is even: " + isEven(num1)); System.out.println(num2 + " is even: " + isEven(num2)); }
}
 
  • isEven方法中,num & 1只保留了num的最低位。如果num是偶数,其最低位为 0,与 1 按位与结果为 0;如果是奇数,最低位为 1,与 1 按位与结果为 1。

获取二进制位是 1 还是 0

 
  • 方法一:位移和按位与
// 获取整数指定位置的二进制位是1还是0(方法一:位移和按位与)
public class BitwiseTricks {// 方法:获取指定位置的位public static int getBit(int num, int i) {// 将num右移i位,然后与1进行按位与操作return (num >> i) & 1;}public static void main(String[] args) {int num = 13; // 二进制为1101int bitPosition = 2; System.out.println("The bit at position " + bitPosition + " of " + num + " is: " + getBit(num, bitPosition)); }
}
  &运算用1做运算即保留,用0做运算即消除
  • 这里num >> inum的第i位移动到最低位,然后与 1 按位与,得到该位的值(0 或 1)。

  • 方法二:掩码操作

// 获取整数指定位置的二进制位是1还是0(方法二:掩码操作)
public class BitwiseTricks {// 方法:获取指定位置的位public static int getBit(int num, int i) {// 创建掩码,将1左移i位int mask = 1 << i;// 与num进行按位与操作return (num & mask) != 0 ? 1 : 0;}public static void main(String[] args) {int num = 13; // 二进制为1101int bitPosition = 2; System.out.println("The bit at position " + bitPosition + " of " + num + " is: " + getBit(num, bitPosition)); }
}
 
  • 1 << i创建了一个只有第i位为 1 的掩码,与num按位与后,如果结果不为 0,则num的第i位为 1,否则为 0。

交换两个整数变量的值

// 交换两个整数变量的值
public class BitwiseTricks {// 方法:交换两个整数public static void swap(int[] nums, int i, int j) {// 利用异或操作交换两个数nums[i] = nums[i] ^ nums[j];nums[j] = nums[i] ^ nums[j];nums[i] = nums[i] ^ nums[j];}public static void main(String[] args) {int[] nums = {5, 10};System.out.println("Before swap: num1 = " + nums[0] + ", num2 = " + nums[1]);swap(nums, 0, 1);System.out.println("After swap: num1 = " + nums[0] + ", num2 = " + nums[1]);}
}
 
  • 原理与前面 C/C++ 的示例相同,通过三次异或操作实现两个数的交换,而不需要额外的临时变量。

不用判断语句,求整数的绝对值

// 不用判断语句求整数的绝对值
public class BitwiseTricks {// 方法:求整数的绝对值public static int abs(int x) {// 得到符号位扩展后的结果int mask = x >> 31;// 利用异或操作求绝对值return (x + mask) ^ mask;}public static void main(String[] args) {int num1 = -5;int num2 = 7;System.out.println("The absolute value of " + num1 + " is: " + abs(num1));System.out.println("The absolute value of " + num2 + " is: " + abs(num2));}
}
 
  • x >> 31对于正数得到 0,对于负数得到-1(在 Java 中int是 32 位有符号整数,-1的二进制表示为全 1)。对于正数,(x + mask) ^ mask = x ^ 0 = x;对于负数,x + mask相当于x - 1,然后与mask异或得到其绝对值。

题解

题1:找出唯一成对的数
        1-1000这1000个数放在含有1001个元素的数组中,只有唯一的一个元素值重复,其它均只出现一次。每个数组元素只能访问一次,设计一个算法,将它找出来;不用辅助存储空间,能否设计一个算法实现?

//使用异或运算
public class 找出唯一成对的数 {public static void main(String[] args) {int N = 1001;int []arr= new int[N];for(int i = 0;i<arr.length-1;i++){arr[i]=i+1;}//生成最后一个随机数arr[arr.length-1]=new Random().nextInt(N-1)+1;//随机下标//这个先实现不了for (int i = 0; i < arr.length; i++) {System.out.print(" "+arr[i]);}int x1=0;for(int i=1;i<=N-1;i++){x1=(x1^i);}for(int i=0;i<N;i++){x1=x1^arr[i];}System.out.println();System.out.println(x1);}
}

题2:找出落单的那个数
        一个数组里除了某一个数字之外,其他的数字都出现了两次。请写程序找出这个只出现一次的数字。

  • 使用 str.charAt(i) - '0' 将字符转换为对应的整数值。
  • 这种方法利用了字符在ASCII表中的顺序特性。

题3:二进制中1的个数
        请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。

        例:9的二进制表示为1001,有2位是1

题4:是不是2的整数次方

        用一条语句判断一个整数是不是2的整数次方。

失败的蓝桥准备工作:经验教训以后别懒

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

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

相关文章

HDFS Full Block Report超限导致性能下降的原因分析

文章目录 前言发现问题失败的为什么是FBR块汇报频率的变化为什么FBR会反复失败HDFS性能下降导致Yarn负载变高的形式化分析理解线程理解IO Wait理解HDFS性能下降导致Yarn负载和使用率增高 引用 前言 我们的Yarn Cluster主要用来运行一批由Airflow定时调度的Spark Job&#xff0…

【Kubernetes基础--Pod深入理解】--查阅笔记2

深入理解Pod 为什么要有个Pod1. 容器协作与资源共享2. 简化调度和资源管理3. 设计模式支持 Pod 基本用法Pod 容器共享 VolumePod 的配置管理ConfigMap 概述创建 ConfigMap 资源对象在 Pod 中使用 ConfigMap使用 ConfigMap 的限制条件 为什么要有个Pod Pod 的引入并非技术冗余&…

Margin和Padding在WPF和CSS中的不同

CSS和WPF中 margin 与 padding 在方向上的规定基本一致&#xff0c;但在使用场景和一些细节上有所不同。 CSS - 方向规定&#xff1a; margin 和 padding 属性可以分别指定上、右、下、左四个方向的值。例如 margin:10px 20px 30px 40px; 表示上外边距为10px、右外边距为20…

gravity`(控制 View 内部内容的对齐方式)

文章目录 **1. 常用取值****示例** **2. layout_gravity&#xff08;控制 View 在父容器中的对齐方式&#xff09;****常用取值****示例** **3. gravity vs layout_gravity 对比****4. 注意事项****5. 总结** 作用对象&#xff1a;当前 View 的内部内容&#xff08;如 TextView…

Go:使用共享变量实现并发

竞态 在串行程序中&#xff0c;步骤执行顺序由程序逻辑决定&#xff1b;而在有多个 goroutine 的并发程序中&#xff0c;不同 goroutine 的事件先后顺序不确定&#xff0c;若无法确定两个事件先后&#xff0c;它们就是并发的。若一个函数在并发调用时能正确工作&#xff0c;称…

Vue3 SSR Serverless架构革命:弹性计算与量子加速

一、全维度Serverless SSR架构 1.1 蜂巢式弹性调度系统 1.2 冷启动时间优化表 优化策略Node.js冷启(ms)Deno冷启(ms)Bun冷启(ms)裸启动1800960420预编译二进制650380210内存快照预热22016090WASM实例池15011075量子状态预载453832 二、边缘渲染协议升级 2.1 流式SSR响应协议…

FPAG IP核调用小练习

一、调用步骤 1、打开Quartus 右上角搜索ROM&#xff0c;如图所示 2、点击后会弹出如图所示 其中文件路径需要选择你自己的 3、点击OK弹出如图所示 图中红色改为12与1024 4、然后一直点NEXT&#xff0c;直到下图 这里要选择后缀为 .mif的文件 5、用C语言生成 .mif文件 //…

Spring Cloud 服务间调用深度解析

前言 在构建微服务架构时&#xff0c;服务间的高效通信是至关重要的。Spring Cloud 提供了一套完整的解决方案来实现服务间的调用、负载均衡、服务发现等功能。本文将深入探讨 Spring Cloud 中服务之间的调用机制&#xff0c;并通过源码片段和 Mermaid 图表帮助读者更好地理解…

AF3 generate_chain_data_cache脚本解读

AlphaFold3 generate_chain_data_cache 脚本在源代码的scripts文件夹下。该脚本从指定目录中批量解析 mmCIF/PDB 文件的工具,并将每个链的基本信息(序列、分辨率、是否属于聚类等)提取并写入 JSON 文件,主要用于后续蛋白质建模、过滤或训练数据准备。 源代码: import ar…

vue项目打包部署到maven仓库

需要的资源文件&#xff0c;都放在根目录下&#xff1a; 1. versionInfo.js const fs require(fs) const path require(path) const mkdirp require(mkdirp) const spawn require(child_process).spawnconst packageObj require(./package.json) const versionNo packa…

MegaTTS3: 下一代高效语音合成技术,重塑AI语音的自然与个性化

在近期的发布中&#xff0c;浙江大学赵洲教授团队与字节跳动联合推出了革命性的第三代语音合成模型——MegaTTS3&#xff0c;该模型不仅在多个专业评测中展现了卓越的性能&#xff0c;还为AI语音的自然性和个性化开辟了新的篇章。 MegaTTS3技术亮点 零样本语音合成 MegaTTS3采用…

【教程】PyTorch多机多卡分布式训练的参数说明 | 附通用启动脚本

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 目录 torchrun 一、什么是 torchrun 二、torchrun 的核心参数讲解 三、torchrun 会自动设置的环境变量 四、torchrun 启动过程举例 机器 A&#…

计算机视觉——基于 Yolov8 目标检测与 OpenCV 光流实现目标追踪

1. 概述 目标检测&#xff08;Object Detection&#xff09;和目标追踪&#xff08;Object Tracking&#xff09;是计算机视觉中的两个关键技术&#xff0c;它们在多种实际应用场景中发挥着重要作用。 目标检测指的是在静态图像或视频帧中识别出特定类别的目标对象&#xff0…

MySQL——流程控制

一、IF条件语句 语法 IF condition THENstatements; ELSEIF condition THENstatements; ELSEstatements; END IF; 判断成绩等级 # 判断成绩等级 # 输入学生的编号,取出学生的第一门课&#xff0c;然后判断当前的课程的等级 drop procedure if exists p2; delimiter $$ crea…

C# + Python混合开发实战:优势互补构建高效应用

文章目录 前言&#x1f94f;一、典型应用场景1. 桌面应用智能化2. 服务端性能优化3. 自动化运维工具 二、四大技术实现方案方案1&#xff1a;进程调用&#xff08;推荐指数&#xff1a;★★★★☆&#xff09;方案2&#xff1a;嵌入Python解释器&#xff08;推荐指数&#xff1…

MLflow 入门

官方主页 MLflow | MLflow官方文档 MLflow: A Tool for Managing the Machine Learning Lifecycle | MLflow 0. 简介 MLflow 是一个开源平台&#xff0c;专门为了帮助机器学习的从业者和团队处理机器学习过程中的复杂性而设计。MLflow 关注机器学习项目的完整生命周期&#x…

【蓝桥杯选拔赛真题101】Scratch吐丝的蜘蛛 第十五届蓝桥杯scratch图形化编程 少儿编程创意编程选拔赛真题解析

目录 scratch吐丝的蜘蛛 一、题目要求 1、准备工作 2、功能实现 二、案例分析 1、角色分析 2、背景分析 3、前期准备 三、解题思路 四、程序编写 五、考点分析 六、推荐资料 1、scratch资料 2、python资料 3、C++资料 scratch吐丝的蜘蛛 第十五届青少年蓝桥杯s…

智谱最新模型GLM4是如何练成的

写在前面 这篇博客将基于《ChatGLM: A Family of Large Language Models from GLM-130B to GLM-4 All Tools》,深入剖析 GLM-4 系列在**模型架构设计、预训练、后训练(对齐)、以及关键技术创新(如长上下文处理、Agent 能力构建)**等环节的实现逻辑与设计考量,带你全面了…

第二届电气技术与自动化工程国际学术会议 (ETAE 2025)

重要信息 2025年4月25-27日 中国广州 官网: http://www.icetae.com/ 部分 征稿主题 Track 1&#xff1a;电气工程 输配电、电磁兼容、高电压和绝缘技术、电气工程、电气测量、电力电子及其应用、机电一体化、电路与系统、电能质量和电磁兼容性、电力系统及其自…

设备调试--反思与总结

最近回顾项目&#xff0c; 发现&#xff1a;在调试过程中最耽误时间的可能不是技术难度&#xff0c;而是惯性思维&#xff1b; 例如&#xff1a; 我写can通信滤波器的时候&#xff0c;可能是不过滤的&#xff1b;是接收所有的id报文&#xff0c;然后用业务逻辑过滤&#xff08…