装修设计方案/重庆优化seo
【力扣面试】面试题 05.03. 翻转数位
文章目录
- 题目
- 解题思路
- 代码
题目
给定一个32位整数 num,你可以将一个数位从0变为1。请编写一个程序,找出你能够获得的最长的一串1的长度。
示例 1:
输入: num = 1775(11011101111)
输出: 8
示例 2:
输入: num = 7(0111)
输出: 4
解题思路
思路:
1、求连续1的数量,如遇到0,则下标指针++
2、稍微思考一下,不难明白此时本题就转换为:数组中最大的相邻元素之和。
3、最后要防一手 -1 的情况,因为-1的二进制为32个1。直接返回即可
代码
class Solution {public int reverseBits(int num) {if (num==-1){return 32;}String s = Integer.toBinaryString(num);System.out.println(s);int n = 0, max = 0;int[] a = new int[32];int f = 0;//统计每一段连续1的数量for (int i = 0; i < s.length(); i++) {if (s.charAt(i) == '1') {a[n]++;} else {n++;}}for (int i = 0; i < a.length - 1; i++) {max = Math.max(max, a[i] + a[i + 1] + 1);}return max;}
}