首页 > 贝壳8.11第三题 求证
头像
liarrrrrr
编辑于 2020-08-12 11:34
+ 关注

贝壳8.11第三题 求证

我的思路:一个数组中元素进行或运算,要求值最大且长度最短,如果刨除最大值,其他值做或运算无论如何也不可能比最大值大,所以先找出数组中最大值,然后分别向两边遍历,
1、如果与相邻的值进行或运算比原值大,则 长度count加一
2、如果或运算等于原值就要继续遍历查看接下来是否还会变大,并记录或运算相等的值的数量,如果还能继续比原值大,则将这些元素加进去
3、如果相邻元素进行或运算比原值小,则直接终止该方向的遍历。
答题的时候题没看清楚,只过了20%,稍微修改了的代码:
import java.util.Scanner;

public class Shell3 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        long count = 1;
        int n = sc.nextInt();
        int[] arr = new int[n];
        int max = 0;
        int index = 0;
        for(int i = 0;i < n;i++){
            arr[i] = sc.nextInt();
            if(max < arr[i]){
                max = arr[i];
                index = i;
            }
        }
        int left = 0;
        int right = 0;
        for(int i = index;i>0;i--){
            int min = arr[i-1];
            if((max | min) > max){
                max |= min;
                count = count+left+1;
                left = 0;
            }else if((max |= min) == max){
                left += 1;
                continue;
            }else{
                break;
            }
        }
        for(int i = index;i < n-1;i++){
            int min = arr[i+1];
            if((max | min) > max){
                max |= min;
                count = count+right+1;
                right = 0;
            }else if((max |= min) == max){
                right += 1;
                continue;
            }else{
                break;
            }
        }
        System.out.println(count);
    }
}

全部评论

(3) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐