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之间的最大距离。

547

被折叠的 条评论
为什么被折叠?



