java数据结构与算法基础-----位运算-----持续补充

考研复试机试C++数据结构与算法模板大全 数据结构与算法是计算机科学的核心基础,其中线性表、树、图等基础数据结构在工程实践中广泛应用。通过STL等标准库实现的高效数据结构操作,能够显著提升代码执行效率。在考研机试等编程能力测试场景中,熟练掌握动态数组、链表、二叉搜索树等数据结构的工程实现尤为关键。本文提供的C++模板代码针对机试高频考点,包含动态数组的2倍扩容策略、链表的狸猫换太子删除法等23种数据结构实现,以及DFS的三种写法和背包问题的空间优化等18类算法模板,特别适合需要快速提升编程实战能力的考生。所有代码均通过边界测试验证,并附带时间复杂度 阅读详情
java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.youkuaiyun.com/grd_java/article/details/123063846

刷题过程中,用到什么关于位运算的知识点,就补充什么知识点到这里

一、基本位运算

1. 异或相关

异或
  1. 两数相同异或为0,两数不相同异或为1
  2. 任何数a异或0,都等于a本身。0 ⊕ a = a
  3. 两个相同的数异或必然为0。a ⊕ a = 0;
  4. 异或具有结合律和交换律。
  1. 结合律0⊕1⊕2⊕2 = (0⊕1)⊕(2⊕2) = 1 ⊕ 0 = 1;
  2. 交换律0⊕1⊕2⊕2 = 2⊕1⊕2⊕0
2. 奇偶异或1 = 加一或减一
  1. 如果mid是偶数,mid +1 操作相当于 mid ^ 1

例如2是偶数,二进制为0010,异或1(二进制0001)结果为0011.

  1. 如果mid是奇数,mid - 1 操作相当于 mid ^ 1

例如1是奇数,二进制为0001,异或1(二进制0001)结果为0000.

实现加法
  1. 我们不能使用加减运算符。那么就只能学习硬件底层的加法器的逻辑来处理了(计算机组成原理中加法器的知识)
  2. 首先想要实现一位加法器,必须知道如何处理进位信息,例如1+1 = 进位1和本位0
  3. 也就是说,整个加法器都是由两个操作来处理,无进位加法结果,和进位后结果
  1. 无进位加法结果实现方法:a异或b。因为我们要实现本位1+0 = 0+1 = 1和0+0 = 1+1 = 0.

注意,这里加法是抛去进位信息的。例如1+1 = 10,其中1是进位,而0是本位,我们这里只要本位信息

  1. 进位结果实现方法:(a & b) << 1. 因为我们要实现进位1+0 = 0+1 = 0和0+0 = 0,和1+1 = 1

1+1 = 1的原因是 1+1 = 10.也就是逢二进一,所以进位为1.

不容易理解的是进位结果为什么是(a & b) << 1

  1. 假设a = 0111,b = 0101.此时a&b = 0101,左移一位为1010
  2. 我们发现右移后的结果,里面的1正好是进位后的1需要去的地方
  3. 因为a+b = 0111 + 0101,其中标红的位置两个1相加必然会产生进位
  4. 往哪里进位?如果允许2的出现的话,结果会是这样a+b = 0212
  5. 但是很遗憾,不允许2的出现,所以他俩得向前进位1,也就是0212 = 0+101+10.也就是2需要逢二进一,进位到它们的高位
  6. 因此a & b只能获取哪些地方是加出2的,这些2需要向高位进1。例如a&b = 0101 正好对应a+b = 0212中需要进位的2的位置
  7. 因此我们需要左移一位,获取0212 = 0+101+10中0+1和1+1的进1的位置
  1. 例如a = 1,b = 2. 二进制分别为a = 0001,b = 0010
  2. 此时不考虑进位,相加结果为a^b = 0011,我们发现压根也不会产生进位信息
  1. 例如a = 2,b = 3,二进制分别为a = 0010,b = 0011
  2. 此时a ^ b = 0001,也就是不进位加法结果
  3. 此时获取需要进位的位置(相加为2的位置),a & b = 0010,其中1的位置,正好是a+b后二进制为按位相加 = 2的位置,这些位置需要进位1
  4. 因此通过左移操作,获取需要进位的1进位到哪里,(a&b)<<1 = 0100
  5. 此时将本位结果x = a^b = 0001和进位相加结果y = (a&b)<<1 = 0100,不进位相加x ^ y得到x = 0101 = 5.
  6. 继续获取进位信息(x&y)<<1 = 0000.发现没有需要进位的了,则加法完成。

2. 与操作

1. 与
  1. 两个数都是1,相与为1. 1&1=1
  2. 两个数有一个是0,相与为0,1&0=0
2. 奇偶数与1操作

mid -= mid&1. 如果mid是奇数,则等价于mid-1变为偶数。如果mid是偶数,则等价于mid-0不进行改变。

假设mid是偶数2,二进制为0010,2&1 = 0010 & 0001 = 0000.也就是mid&1 = 0.mid - 0 = mid。
假设mid是奇数3,二进制为0011,3&1 = 0011&0001 = 0001,也就是mid&1 = 1.mid -=mid&1 ==> mid -1

3. 去末尾1
  1. 对于100000000001.虽然我们一眼看到只有两个1,但是笨办法依然需要将所有的位数都处理一遍
  2. 我们如何跳过中间的0,直接统计1的个数呢?让上面这一串,只循环右移2次
  3. 针对这个问题,BK算法出现了,他利用了二进制的特性,实现一次性删除最右侧的1的效果
    在这里插入图片描述
  4. 对于十进制来说我们做减法时,低位不够减需要向高位借1,拿过来就是10
  5. 二进制也一样,不够减就得借1.拿过来就是2
  6. 也就是说,如果对2进制串进行-1操作的话,最低位是1还好,可以直接减去,如果不够减,就必须一直向高位借,直到遇到一个够借1的。这样就会将2进制串中,最后一个1借掉
  7. 例如上图中,x = 10001000,-1后最后一个1被借了,变成10000111
  8. 此时将这两个二进制串进行与运算,就会实现将最后一个1去掉的效果
4. 只保留末尾的1
  1. 正数的补码和源码是一样的,例如1 = 0,000 0000 0000 0000 0000 0000 0000 0001 (以32位进行保存)
  2. 负数的补码和源码的区别是,符号位和最右边的1不变,这两个不变的二进制位中间的其余数值位全部取反
  1. 原码:例如-1= 1,000 0000 0000 0000 0000 0000 0000 0001
  2. 补码:例如-1= 1,111 1111 1111 1111 1111 1111 1111 1111
  1. 我们现在有了1和-1的补码。
  1. 1 = 0,000 0000 0000 0000 0000 0000 0000 0001
  2. -1= 1,111 1111 1111 1111 1111 1111 1111 1111
  3. 我们发现,除了最右边的1以外,这个1左边所有的数,都是不同的。
  1. 如果此时我执行1与-1 也就是 1 & (-1)

我会得到0,000 0000 0000 0000 0000 0000 0000 0001,也就是除了最右边的1以外,其余全是0. 这样我就得到了这个数的最低位的那个1.也就是我得到了这个数,最右边的一个二进制1的位置。并且其余二进制位全是0

5.只提取奇数位,或偶数位
  1. 我们将奇数位置标识出来:(10101010101010101010101010101010)二进制中,只对奇数位置操作
  2. 当然如果转换为16进制,它会比较好看一点:其16进制形式为0xaaaaaaaa
  3. 如果n&0xaaaaaaaa ==0,就说明n的二进制中的1,只出现在偶数位置上。因为如果出现在奇数位置上,两个二进制为都是1,与操作过后的结果一定也是1.
  4. 当然我们可以标识偶数位置(01010101010101010101010101010101) = 0x55555555
  5. 如果n& 0x55555555 = n的话,就说明n中1的位置正好在偶数位置上

3. 补码

补码

  1. C,C++,java等编程语言中,为了更好的和硬件交互,数字以补码形式存储。
  2. 各种码的转换关系如下,了解即可,我们只需要统一用补码进行计算即可。(看不懂没关系,继续看下面)
    在这里插入图片描述
    在这里插入图片描述
补码(了解即可)
  1. 真值:我们通过除基取余法得到的二进制代码,统一称为真值。例如十进制数8的二进制位1000,这个1000就是一个真值。
  2. 原码:那么如何区分真值是正数还是负数呢?我们只需要用掉开头的一个二进制位,0表示正数,1表示负数。例如8的原码就是0000 … 1000 标红的那位就是符号为,剩下的都是数值位. -8的原码就是1000 … 1000负数的符号位为1.
  3. 补码,方便计算机运算的一种码,它不方便人类理解,但是方便计算机。它可以通过原码来推导
  1. 正数的补码 = 原码
  2. 负数的补码 = 符号位不变,其余位取反,然后末位+1。当然我们有一个口诀,就是从右向左找到第一个1,然后将符号位和这个1之间所有元素按位取反即可(图解如下)
    在这里插入图片描述
不妨做道题:🏆LeetCode645. 错误的集合(位运算解法需要重点掌握)https://blog.youkuaiyun.com/grd_java/article/details/135757934
这道题,需要你知道关于补码的什么呢?
  1. 集合中保存的都是1~n的正数,计算机保存也都是补码,也就是符号位为0表示正数
  2. 正数的补码和源码是一样的,例如1 = 0,000 0000 0000 0000 0000 0000 0000 0001 (以32位进行保存)
  3. 负数的补码和源码的区别是,符号位和最右边的1不变,这两个不变的二进制位中间的其余数值位全部取反
  1. 原码:例如-1= 1,000 0000 0000 0000 0000 0000 0000 0001
  2. 补码:例如-1= 1,111 1111 1111 1111 1111 1111 1111 1111
  1. 我们现在有了1和-1的补码。
  1. 1 = 0,000 0000 0000 0000 0000 0000 0000 0001
  2. -1= 1,111 1111 1111 1111 1111 1111 1111 1111
  3. 我们发现,除了最右边的1以外,这个1左边所有的数,都是不同的。
  1. 如果此时我执行1与-1 也就是 1 & (-1)

我会得到0,000 0000 0000 0000 0000 0000 0000 0001,也就是除了最右边的1以外,其余全是0. 这样我就得到了这个数的最低位的那个1.也就是我得到了这个数,最右边的一个二进制1的位置。并且其余二进制位全是0

  1. 得到它有什么用呢?作用就是简化判断条件,让我们只需要用if考虑两种情况,而不是无数种。
  1. 0 & 任何数都是0,只有1 & 1 才能唯一的 = 1. 这就是它的作用。对于最终得到的只有最右1,其余全为0的二进制串lowbit = 0,000 0000 0000 0000 0000 0000 0000 0001来说,只有遇到一个同样1在最右边的数才会不为0,否则它必然为0.
  2. 它让任何数与其相与只有两种结果,要么为1,要么为0.而不是各种值。
  1. 例如 8 = 0,000 0000 0000 0000 0000 0000 0000 1000
  2. 和lowbit相与0,000 0000 0000 0000 0000 0000 0000 0001
  3. 结果为==0,000 0000 0000 0000 0000 0000 0000 0000
  1. 如果不进行只取最右边1的操作,直接随便两个数呢?

8的二进制补码为:0000 … 1000
9的二进制补码为:0000 … 1001
异或结果为:==== 0000 … 1000 这个值=8,不同的数,还有无穷多种结果
请你告诉我,我该如何写if语句,描述这大量的结果呢?我们当然希望只有0或者1两种状态,以方便我们写if语句。所以这就是只保留最右边的1,其余全部为0的作用。

4. 或操作

1. 找到二进制最左侧的1,然后将这个1右边全部填充为1。

例如00100000000这个二进制,找到最左侧的1,然后右边全部填充为1.也就是00111111111,我们通过找num补数的案例来讲解

  1. 对整数num的二进制(不操作前导0),全部取反,就是num的补数
  2. 例如5的二进制0000 0000 0000 0000 0000 0000 0000 0101,红色的0都是前导0,求补数时,是不需要取反的。
  3. 5的补数0000 0000 0000 0000 0000 0000 0000 0010,只有黄色的非前导0部分才进行取反
  4. 如果只对010操作的话,我们只需要让其每一位和1异或就可以取反,例如101 ^ 111 = 010
  5. 但是计算机中5的二进制是0000 0000 0000 0000 0000 0000 0000 0101。如果异或1111 1111 1111 1111 1111 1111 1111 1111,会得到1111 1111 1111 1111 1111 1111 1111 1010,这样的话,答案就错了
  6. 如何解决这个问题呢?如果我们能让5的二进制只异或0000 0000 0000 0000 0000 0000 0000 0111的话,就可以得到5的补数0000 0000 0000 0000 0000 0000 0000 0010

所以对于一个数num = 0000 0000 0000 0000 0000 0000 0000 0101,如何能找出只有黄色部分全1,红色部分全0的二进制串t = 0000 0000 0000 0000 0000 0000 0000 0111,就是破题的关键

而针对这个问题,有个很简单的操作方式,就是通过位移操作和或操作配合,对1,2,4,8,16,…的右移结果相或,就可以抛弃前导0,对其余位全部填充1.案例如下:下面的案例是针对32位的int型,所以只需要右移到16.如果是64位的long型,需要右移到32,依此类推。

/** 将num中非前导0的地方都填充为1 **/
//t=num:    0100 0000 0000 0000 0000 0000 0000 0101
//t>>1      0010 0000 0000 0000 0000 0000 0000 0010
//t=t|t>>1  0110 0000 0000 0000 0000 0000 0000 0111
//t>>2      0001 1000 0000 0000 0000 0000 0000 0001
//t=t|t>>2  0111 1000 0000 0000 0000 0000 0000 0111
//t>>4      0000 0111 1000 0000 0000 0000 0000 0000
//t=t|t>>4  0111 1111 1000 0000 0000 0000 0000 0111
//t>>8      0000 0000 0111 1111 1000 0000 0000 0000
//t=t|t>>8  0111 1111 1111 1111 1000 0000 0000 0111
//t>>16     0000 0000 0000 0000 0111 1111 1111 1111
//t=t|t>>16 0111 1111 1111 1111 1111 1111 1111 1111
int t = num;
t = t | (t >> 1);
t |= t >> 2;
t |= t >> 4;
t |= t >> 8;
t |= t >> 16;
【信息科学与工程学】计算机科学与自动化——第八十一篇 Java分布式软件高并发/高可用算法01 4. 消息队列(如Kafka的Topic分区,本质是范围)。3. 若是ACCEPT事件,bossGroup线程接受连接,创建SocketChannel,并将其注册到workerGroup的一个EventLoop的Selector上,关注READ事件。1. 分布式缓存分片(如Redis Cluster)。4. 分布式文件存储(如Ceph CRUSH)。6. 调用栈的模拟(如协程)。3. 服务网格(如Istio)的基础。2. 本地缓存与集中式缓存(如Redis)的一致性维护。3. 静态数据(如配置)缓存。 阅读详情

相关推荐

DCM、PLL以及DLL等概念及详情

介绍DLL、PLL以及DCM的概念,总结其模块构成、工作原理、相互之间的差异与各自优势。

CLL_caicai的博客 8339

Java刷题必备:集合框架、字符串与位运算实战技巧

在算法与数据结构的学习中,掌握核心API和常用工具类是提升编码效率的关键。Java集合框架提供了丰富的数据结构,如HashMap、ArrayList和PriorityQueue,理解其内部原理和适用场景能帮助开发者在解决实际问题时做出最优选择。字符串处理作为编程基础,StringBuilder的合理使用能显著提升性能,而位运算则在特定场景下提供高效的解决方案。这些技术不仅在面试刷题中至关重要,在工程实践中也广泛应用,例如使用HashMap进行频率统计、利用PriorityQueue解决Top K问题等。本文

weixin_34208283的博客 408

自动驾驶仿真(五)—— 基于Carsim、Prescan、Simulink的联合仿真

自动驾驶仿真五——基于Carsim、Prescan、Simulink的联合仿真1. 联合仿真流程2. CarSim联合仿真配置要点3. Prescan联合仿真配置要点4. Carsim、Prescan、Simulink联合仿真结果5. 参考学习的书目教材 博主前面的博文已经介绍了Carsim和Prescan各自与Matlab/Simulink的相关联合仿真应用实例,并且论述过几款软件各自的优势及用法,CarSim适合动力学模型的建立,PreScan适合行车场景的搭建,Simulink适合控制算法的设计及信号

zhudj08的博客 1万+

HashMap数据结构原理简介

(对“哈希”有不了解的小伙伴可参见我上一篇博客哈希简介,内容较简洁,理解足矣) 哈希简介,点击即可,后续会不定时持续更新 一、简述 1、HashMap是JDK中较为常用的一种数据类型,是数组+链表的数据结构,也是当今世界检索最快的哈希算法; 2、它是基于哈希表的Map接口的实现,并允许使用null值 和 null键(即key 与 value 可为空); 3、它是非线程安全的,也就是说多线程情况下可...

weixin_44389456的博客 538

SQL注入:联合查询的三个绕过技巧

在SQL注入中,可以利用科学计数法来绕过对输入的限制。例如,可以使用科学计数法来绕过对字符串长度的限制,通过将字符串拆分成多个部分并使用科学计数法来表示。此外,还可以利用数据库的特定特性或语法来替代原始的查询语句,从而执行联合查询或其他恶意操作。另外,还可以尝试利用无列名注入的技巧,通过在原始查询中使用通配符或其他方式来绕过对列名的限制,从而执行恶意操作。

qq_68163788的博客 3795

无线网卡选购指南:哪些型号支持Kali Linux的监听模式?附免驱动网卡推荐

本文详细解析了如何在Kali Linux下选购支持监听模式的无线网卡。核心在于选择兼容的芯片组,如Atheros AR9271和Ralink RT3070等经典型号,并提供了免驱动网卡推荐与实战配置指南,帮助安全研究人员和爱好者快速搭建无线测试环境。

wind6的博客 1563

算法大神左程云耗尽5年心血分享程序员代码面试指南第2版文档

如果你选择了IT行业并坚定的走下去,这个方向肯定是没有一丝问题的,这是个高薪行业,但是高薪是凭自己的努力学习获取来的,这次我把P8大佬用过的一些学习笔记(pdf)都整理在本文中了《Java中高级核心知识全面解析》小米商场项目实战,别再担心面试没有实战项目:一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

2301_76348344的博客 1218

【FF-A】第四章 Concepts

SPM的责任分为两个组件:SPM调度器(SPMD)和SPM核心(SPMC)。这两个组件都可以访问整个物理地址空间,并且是受信任的计算基础的一部分。当无需区分这两个组件时,术语SPM被使用。这些组件的责任如下所示。SPMD 位于 EL3 中,以 AArch64 或 AArch32 执行状态运行。SPMC 可以与 SPMD 共存在 EL3 中,也可以位于相邻的异常级别,即 S-EL1 或 S-EL2。SPM 在启动时初始化 EL3 LSP,并在运行时促进它们与其他端点之间的通信。

baron-周贺贺-代码改变世界ctw 1196

蓝桥杯知识点汇总:基础知识和常用算法_viv0手机怎么关闭开发者模式

图论:6. 贪心7. 动态规划10. 等另附:: :/618668825)**

2401_84976285的博客 470

【产品】 产品设计:如何解决铝合金氧化着色后表面硬度低的问题(硬质氧化)

1、氧化处理技术 1)化学氧化 化学氧化处理所获得的膜层较薄,一般厚度为0.5μm ~4μm,质软不耐磨,抗蚀能力低于阳极氧化膜。 一般不宜单独便用,由于化学氧化膜吸附能力好,主要作用于油漆的底层,化学氧化按其溶液性可分为碱性和酸性两种。按其膜层性质可分为氧化膜,磷酸盐膜、铬酸盐膜及磷酸一铬酸盐膜等(这类型的氧化膜是可导电)。 2)电化学氧化(阳极氧化) 电化学氧化(俗称阳极氧化)是铝及...

产品线负责人 9743

20.Labview使用子vi进行VI间的数据传递详解(模块化)

子VI(模块化)题主在题注中也提到, 子VI的建立只是为了减少程序的负担,那么我们当使用子VI的时候首先就要明确什么是子VI?什么样的程序可以作为子VI?首先我们来看NI官方给的定义,具体说明如下图所示:题主已经将重点画出来了,在官方的解释中将子VI定义为了模块化,大家可以看到创建模块化子VI的特点在于减少代码重复工作优化了程序的框架结构。把一个代码打包,需要的时候就拎出来让他处理处理,不需要的时候就让它躺在我的列表里就行了也不占用运行空间。那么创建子VI需要需要注意以下几点:①任何一个程序。

关注我,更多技术问题欢迎私聊~ 3517

蓝桥杯学习大纲

致酷德与热爱算法、编程的小伙伴们

2302_80067378的博客 9348

基于模糊神经网络实现水质评价预测 - Matlab源码

首先定义输入层、隐含层和输出层的节点数,并初始化权重和阈值,然后开始训练模型,在每轮训练中通过比较模型的输出值与实际值的误差来更新权重和阈值,直到误差达到最小值,为了提高模型的性能,我们可以采用交叉验证等技术进行优化。首先需要准备好数据集,使用的是嘉陵江的水质监测数据集,数据集包含了多个指标,如 pH 值、溶解氧、总氮、总磷等,以及相应的水质等级,我们需要将数据集分为训练集和测试集。在当今环境日益恶化的情况下,水质监测变得越来越重要,模糊神经网络作为一种新型的。

weixin_50547796的博客 147

华为2020校招笔试编程题 看这篇就够了(下)

背景 接上篇的背景,继续看看,首先把大纲再发一份出来。 干货(高级部分) 1. 高级数据结构概念,基本操作,以及优缺点等 1.1 二叉查找树 简单题 (对称二叉树) (平衡二叉树) (翻转二叉树) 中等题 (二叉树的中序遍历) (不通的二叉搜索树) (二叉搜索书迭代器) (从二叉搜索书到更大和树) 1.2 堆 简单题 (数据流中的第K大元素) (最后一块石头的重量) 中等题 ...

weixin_38132951的博客 4436

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

凭本事拿到了年薪190W阿里(Java)的offer?学习分享

学习笔记/书籍推荐=========

2401_84048179的博客 919

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

JDK 5 ~ 17 新特性倾情整理!(持续补充)

为了大家对JDK有一个全面的了解,下面我为大家整理了JDK5~17的所有关键新特性! 随jdk发布,会持续补充 JDK5新特性 自动装箱与拆箱 枚举 静态导入 可变参数(Varargs) 内省(introspector) 泛型(Generic) For-Each循环 JDK6新特性 Desktop类和SystemTray类 使用JAXB2来实现对象与XML之间的映射 理解STAX 使用Compiler API 轻量级 Ht......

杀神吴起的智脑 1208

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

凭本事拿到了年薪190W阿里(Java)的offer(1),2024年最新美团开发面试流程

三个工作日收到了offer,头条面试体验还是很棒的,这次的头条面试好像每面技术都问了我算法,然后就是中间件、MySQL、Redis、Kafka、网络等等。第一个是算法关于算法,我觉得最好的是刷题,作死的刷的,多做多练习,加上自己的理解,还是比较容易拿下的。而且,我貌似是将《算法刷题LeetCode中文版》、《算法的乐趣》大概都过了一遍,尤其是这本。

m0_56169789的博客 817

金三银四面试字节大厂必备:600道算法刷题笔记!GitHub已疯传

现在正是金三银四的春招高潮,前阵子小编一直在搭建自己的网站,并整理了全套的**【一线互联网大厂Java核心面试题库+解析】:包括Java基础、异常、集合、并发编程、JVM、Spring全家桶、MyBatis、Redis、数据库、中间件MQ、Dubbo、Linux、Tomcat、ZooKeeper、Netty等等**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)

2401_84419309的博客 765

终极Coding Interview University指南:从自学到大厂offer的完整路径

Coding Interview University 是一个全面的编程面试自学计划,最初由自学者创建并成功入职亚马逊。本指南将带你了解如何利用这个开源项目系统学习数据结构、算法和计算机科学基础知识,高效准备技术面试,大幅提升拿到大厂offer的几率。 ## 为什么选择Coding Interview University? 这个项目特别适合两类人群:**零基础转码的新手**和**需要补充计算

gitblog_01111的博客 911

个人算法题精简导航整理(精炼汇总,含知识点、模板题、题单)

本章节内容主要做一个全局算法题导航指引,含有代码基本模板、相对应习题以及相关知识点,所有题目围绕这个导航索引进行补充扩展,目前博主水平有限也在不断学习更新当前博客内容。博客目录索引(持续更新)自定义的键值对集合Pair:在acwing中需要自定义K x;V y;} }

每个人都是独一无二的,把握好自己的节奏,跟着自己的心走。 2464

软考初级程序员自学指南:从零基础到掌握核心技能的系统路径

在计算机科学领域,扎实的基础知识是构建技术能力的基石。理解计算机系统的工作原理、数据结构的组织方式以及算法的核心思想,是每一位开发者从入门到精通的必经之路。这些底层原理不仅解释了程序如何运行,更是排查复杂问题、理解高级框架的关键。从工程实践角度看,掌握编程语言、数据库操作和软件工程方法,能将理论转化为解决实际问题的能力。软考初级程序员认证正是围绕这一知识体系设计,它系统性地涵盖了计算机基础、程序设计、数据结构、软件工程和网络技术等核心模块。对于初学者和转行者而言,通过备考可以高效地构建完整的知识框架,将C语

weixin_34221112的博客 400

开发者必备的顶级Java开发工具,附面试题

栈和队列部分(10) 设计一个有getMin功能的栈(士★☆☆☆) 由两个栈组成的队列(尉★★☆☆) 如何仅用递归函数和栈操作逆序一个栈(尉★★☆☆) 猫狗队列(士★☆☆☆) 用一个栈实现另一个栈的排序(士★☆☆☆) 用栈来求解汉诺塔问题(校★★★☆) 生成窗口最大值数组(尉★★☆☆) 构造数组的MaxTree(校★★★☆) 求最大子矩阵的大小(校★★★☆) 最大值减去最小值小于或等于num的子数组数量(校★★★☆) 链表问题(20) 打印两个有序链表的公共部

m0_57501529的博客 112

Java最高频八股文速通

final 类:String 类被声明为 final,这意味着它不能被继承,从而防止了通过继承改变其行为。final 字段:String 类中的 value 字段是 final 的,这保证了 String 对象在创建后其内部字符数组不会被改变。没有提供修改方法:String 类没有提供任何可以修改其内容的方法。所有对 String 的操作(如拼接、替换等)都会生成一个新的String 对象。

qq_43751506的博客 6400

java动态规划硬币划分,华为2020校招笔试编程题 看这篇就够了(下)

背景接上篇的背景,继续看看,首先把大纲再发一份出来。 干货(高级部分)1. 高级数据结构概念,基本操作,以及优缺点等1.1 二叉查找树简单题(对称二叉树)(平衡二叉树)(翻转二叉树)中等题(二叉树的中序遍历)(不通的二叉搜索树)(二叉搜索书迭代器)(从二叉搜索书到更大和树)1.2 堆简单题(数据流中的第K大元素)(最后一块石头的重量)中等题(根据字符出现频率排序)(前K个高频单词)(重构字符串...

weixin_34626306的博客 222

Java与AI大模型融合开发:金三银四求职指南

在当今企业级开发领域,Java作为稳定的后端技术栈与AI大模型的结合已成为技术融合的重要趋势。理解微服务架构与分布式系统原理是构建智能应用的基础,而AI组件的集成则为企业系统带来智能化升级。从技术实现角度看,需要掌握Spring Cloud等Java框架的工程化能力,同时熟悉Prompt工程和模型微调等AI技术。这种复合型技能在金融、电商等需要智能决策的场景中具有重要价值,特别是在智能客服、风控系统等典型应用中。本文通过分析Java+AI开发者的能力矩阵,为求职者提供从技术准备到面试策略的全方位指导,帮助开

weixin_34252090的博客 405

Java基础语法学习指南:从零到精通的系统化路径

Java作为面向对象编程语言的代表,其强类型系统和丰富的语法特性构成了企业级开发的基石。理解数据类型体系、变量作用域和运算符原理是掌握Java编程的基础,这些概念直接影响代码的执行效率和内存管理。在实际开发中,从JDK环境配置到集合框架应用,每个环节都需要遵循工程实践规范。特别是随着Java 8引入Lambda表达式和Stream API,以及后续版本的模式匹配等特性,现代Java开发呈现出函数式与面向对象融合的趋势。本指南针对Java SE 17 LTS版本,系统梳理了从基础语法到面向对象核心概念的完整知

weixin_34062469的博客 424
上一篇: java数据结构与算法刷题-----LeetCode459. 重复的子字符串
下一篇: java数据结构与算法刷题-----LeetCode409. 最长回文串
ydenergy_殷志鹏
博客等级 码龄7年 5887粉丝 543原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ydenergy_殷志鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值