2024年Android最全Leetcode面T5(1-9)树(2),kotlin 桌面gui

面试复习笔记:

这份资料我从春招开始,就会将各博客、论坛。网站上等优质的Android开发中高级面试题收集起来,然后全网寻找最优的解答方案。每一道面试题都是百分百的大厂面经真题+最优解答。包知识脉络 + 诸多细节。
节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。

《960页Android开发笔记》

《1307页Android开发面试宝典》

包含了腾讯、百度、小米、阿里、乐视、美团、58、猎豹、360、新浪、搜狐等一线互联网公司面试被问到的题目。熟悉本文中列出的知识点会大大增加通过前两轮技术面试的几率。

《507页Android开发相关源码解析》

只要是程序员,不管是Java还是Android,如果不去阅读源码,只看API文档,那就只是停留于皮毛,这对我们知识体系的建立和完备以及实战技术的提升都是不利的。

真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读各大系统源码,还包括各种优秀的开源库。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

输入:N = 1024(10000000000), M = 19(10011), i = 2, j = 6

输出:N = 1100(10001001100)

示例2:

输入: N = 0, M = 31(11111), i = 0, j = 4

输出:N = 31(11111)

/*

  • 给定两个32位的整数N和M,以及表示比特位置的i和j。编写一个方法,将M插入到N中,

  • 使得M从N的第j位开始,到第i位结束,假定从j位到i位足以容纳M,也即是M=10011

  • 那么j和i之间至少可以容纳5个数,假如,不可能出现j=3,i=2的情况,因为第三位和第二位之间放不下M

  • 例如

  • N=1000000000(1024)

  • M=10011(19)

  • i=2,j=6,输出10001001100

  • 思路如下:

  • 1.将N中的从j到i之间清零

  • 2.对M执行移位操作与j和i之间的位对其

  • 3.合并M和N

  • */

public int updateBits(int n,int m,int i,int j)

{

int allOnes=~0;//创建一连串1 假如为11111111

int left=allOnes<<(j+1); //在位置j之前的位均值为1,其余为0,此刻为11100000

int right=((allOnes<<i)-1);//在位置i之后的位均置位1,此刻为00000011

int mask=left | right; //进行位或运算之后得到 11100011

int n_cleared=n& mask; //清除位置j到i的位,然后将M放进去

int m_shifted=m<<i; //将M移动到相应的位置

return n_cleared | m_shifted; //对两者进行位或操作

}

public static void main(String[] args) {

// TODO Auto-generated method stub

BitGet bg = new BitGet();

int num=bg.updateBits(1024, 19, 2, 6);

System.out.println(Integer.toBinaryString(num));

}

Q5.2 二进制数转字符串

二进制数转字符串。给定一个介于0和1之间的实数(如0.72),类型为double,打印它的二进制表达式。如果该数字无法精确地用32位以内的二进制表示,则打印“ERROR”。

示例1:

输入:0.625

输出:“0.101”

示例2:

输入:0.1

输出:“ERROR”

提示:0.1无法被二进制准确表示

提示:

32位包括输出中的"0."这两位。

  • 浮点数乘以进制2,取整数位添加到 二进制小数位后面

  • 浮点数舍去整数位,重复以上过程直至浮点数变成 0,若无法等于 0,则无法精确表示

另参考:二进制小数 转 10进制

举例:将 二进制0.1111转换成 十进制数

二进制            0               .               1                     1                  1                   1

----------------------------------------------------------------------------------------------------------------

换算次方        2^(0)                     2^(-1)             2^(-2)             2^(-3)           2^(-4)

----------------------------------------------------------------------------------------------------------------

换成分数         0/2                        1/2                 1/4                 1/8               1/16

----------------------------------------------------------------------------------------------------------------

换成十进制      0         +                0.5        +       0.25        +     0.125     +   0.0625    =   0.9375

class Solution {

public String printBin(double num) {

StringBuilder builder = new StringBuilder(“0.”);

for (int i = 0; i < 33; i++) {

num *= 2;

if (num >= 1) {

// 取整数部分

builder.append(“1”);

// 取完后减1取小数部分

num -= 1;

} else {

builder.append(0);

}

if (num == 0) {

return builder.toString();

}

}

return “ERROR”;

}

}

Q5.3 翻转数位

示例 1:

输入: num = 1775(11011101111)

输出: 8

示例 2:

输入: num = 7(0111)

输出: 4

Java简单迭代:

curLen记录当前长度,

preLen记录上次翻转后的长度,

因为只能翻转1次,所以需要再次翻转时curLen要减去preLen。

class Solution {

public int reverseBits(int num) {

int maxLen = 0, preLen = 0, curLen = 0, bits = 32;

while (bits-- > 0) {

if ((num & 1) == 0) {

curLen -= preLen;

preLen = curLen + 1;

}

curLen++;

maxLen = Math.max(maxLen, curLen);

num >>= 1;

}

return maxLen;

}

}

Q5.4 下一个数

下一个数。给定一个正整数,找出与其二进制表达式中1的个数相同且大小最接近的那两个数(一个略大,一个略小)。

示例1:

输入:num = 2(或者0b10)

输出:[4, 1] 或者([0b100, 0b1])

示例2:

输入:num = 1

输出:[2, -1]

提示:

num的范围在[1, 2147483647]之间;

如果找不到前一个或者后一个满足条件的正数,那么输出 -1。

手写下一个排列、前一个排列

public int[] findClosedNumbers(int num) {

int up = num + 1;//向上枚举

int down = num - 1;//向下枚举

int count = findOneCount(num);//num的1的个数

while (findOneCount(up) != count) {

up++;

if (up < 0) {//越界了那就是找不到,设置为-1

up = -1;

break;

}

}

while (findOneCount(down) != count) {

down–;

尾声

对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。 整理的这些架构技术希望对Android开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。

最后想要拿高薪实现技术提升薪水得到质的飞跃。最快捷的方式,就是有人可以带着你一起分析,这样学习起来最为高效,所以为了大家能够顺利进阶中高级、架构师,我特地为大家准备了一套高手学习的源码和框架视频等精品Android架构师教程,保证你学了以后保证薪资上升一个台阶。

当你有了学习线路,学习哪些内容,也知道以后的路怎么走了,理论看多了总要实践的。

进阶学习视频

附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题 (含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

oid面试真题** (含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)

[外链图片转存中…(img-paXo926m-1715623113519)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 25
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值