您的位置:首页 > 房产 > 家装 > 安卓开发软件工具_ l设计是做什么的_今天最新新闻摘抄_内容营销成功案例

安卓开发软件工具_ l设计是做什么的_今天最新新闻摘抄_内容营销成功案例

2025/5/14 22:30:48 来源:https://blog.csdn.net/m0_74312445/article/details/143989572  浏览:    关键词:安卓开发软件工具_ l设计是做什么的_今天最新新闻摘抄_内容营销成功案例
安卓开发软件工具_ l设计是做什么的_今天最新新闻摘抄_内容营销成功案例

数组变换

在这里插入图片描述

在这里插入图片描述
以最大元素为基准元素,判读其他元素能否通过 x 2 成为最大值!

那么怎么判断呢:

  1. max % arr[i] == 0
  2. arr[i] * 2 ^n == max
    int x = 2 ^ n == max / arr[i]
    3.只需判断 这个 x 是不是 2 的 n 次放就可以了!

判断 是否为 2 的 n 次 (位运算):

对于一个 2 的 n 次方的数,它在二进制表示下只有一个位是 1,其余位都是 0。例如,2(二进制为 10)、4(二进制为 100)、8(二进制为 1000)等。
当我们对一个 2 的 n 次方的数 n 进行 n & (n - 1) 操作时,结果为 0。这是因为 n - 1 的二进制表示就是将 n 的二进制表示中唯一的那个 1 变成 0,然后其后的所有 0 都变成 1。例如,8(二进制 1000),7(二进制 0111),它们进行按位与操作 1000 & 0111 结果就是 0。而如果一个数不是 2 的 n 次方,那么它的二进制表示中不止一个 1,进行 n & (n - 1) 操作就不会得到 0。

public class PowerOfTwoChecker {public static boolean isPowerOfTwo(int n) {if (n <= 0) {return false;}return (n & (n - 1)) == 0;}
}
import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n = in.nextInt();int[] a = new int[n];int max = 0 ;for(int i = 0; i < n; i++) {a[i] = in.nextInt();max = Math.max(max,a[i]);}boolean flag = true;for(int i = 0 ; i < n; i++) {if(max % a[i] != 0) {flag = false;break;}int x = max / a[i];if((x & (x - 1)) != 0) {flag = false;break;}}if(flag) System.out.println("YES");else System.out.println("NO");}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com