JAVA学习总结(刷leetcode)

1.题目描述:二进制间距

给定一个正整数n,找到并返回n的二进制表示中两个相邻1之间的最长距离。如果不存在两个相邻的1,返回0. 如果只有0将两个1分隔开(可能不存在),则认为这两个1彼此之间相邻。两个1之间的距离是他们的二进制表示中位置的绝对差。

(我的)解题思路:申请一个动态数组来存储该二进制数

问题:JAVA中如何申请同台数组?

1.JAVA区分可变类和不可变类

不可变类:

被可变类在申请多维数组是不需要手动遍历每个元素申请空间,有JAVA虚拟机完成。

例如:申请一个大小为n*n的二维数组

int[][] a = new int [n][n];

可变类:可变类数组申请内存时比较繁琐,需要便利数组对其每个元素都进行实例化。一般自己定义的类都是可变类。

例如:申请一个大小为n=10的一维数组

 申请一个n*n的二维数组

 2.初始化动态数组的几种方式

①以字符串为例:

String[ ] myString ={"1", "2", "3", "4", "5"};

String[ ] myString myString = new String[ ]{"1", "2", "3", "4", "5"};

②使用list

 (其中Assert.assertEquals()1. 如果两者一致, 程序继续往下运行. 2. 如果两者不一致, 中断测试方法, 抛出异常信息 AssertionFailedError,基本格式如下所示

.static public void assertEquals(int expected, int actual) { assertEquals(null, expected, actual); }

)

(官方)解题思路

用一个循环从n的二进制最低位开始遍历,通过n&来求出每一位的1,同时用last记录上一次1出现的位置(1未出现时将其位置设置为-1),若该位为1,则用i-last计算当前两个1之间的距离,并把i值赋给last,n>>=1进行更新,找出两1之间的最大距离。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值