MECE 原则(Mutually Exclusive Collectively Exhaustive)的中文意思是“相互独立,完全穷尽”,简而言之,能够做到不重叠、不遗漏,兼顾排他性和完整性
。
MECE 原则是麦肯锡提出的一种结构化思考方式,无论是报告撰写,提案演讲,业务分析,它是一种很好的思维方式。
public class _56_I数组中数字出现的次数 { public static void main(String[] args) { int[] nums = {2,4,6,1,4,2}; int mask=0; int a = 0; int b = 0; //寻找两个不重复的数的二进制相异的二进制位数:第一个1 // 0 ^ x = x; 1 ^ 1 = 0; //联想到半加器来理解 for (int num : nums){ //这里求出想要的 mask = a^b的值, 用于比较出二进制相异的二进制位数:第一个1 mask ^= num; } //找到用于比较出二进制相异的二进制位数:第一个1 int index = 1; while ( (mask & index) == 0){ index = index << 1; } //根据index,将两个不同的数分组,同时该位为1 / 0 的重复出现的数会被分到一组,因为值相同 // 2,2,4,4,6 //1 for (int num : nums){ if ( (index&num) == 0 ){ //利用0^x=0,index只有一个位置是1,区分该位置是否为0或1:只有1&1=1。 a^=num; }else{ b^=num; } } System.out.println(a + "和" + b ); } }
比如说:== 大于位运算符:
(a & 1) == 1 && (b & 1) == 1
优先级
运算符 | 结合性 |
---|---|
[ ] . ( ) (方法调用) | 从左向右 |
! ~ ++ – +(一元运算) -(一元运算) | 从右向左 |
* / % | 从左向右 |
+ - | 从左向右 |
> >>> | 从左向右 |
< >= instanceof | 从左向右 |
== != | 从左向右 |
& | 从左向右 |
^ | 从左向右 |
| | 从左向右 |
&& | 从左向右 |
|| | 从左向右 |
?: | 从右向左 |
= | 从右向左 |
异或,(・∀・(・∀・(・∀・*):
0^0 = 0, 1^0 = 1, 0^1 = 1, 1^1 = 0
java的位运算符有三种: >> , >>> , <<。没有有符号左移
。
对于右移,简单的说,无符号移动无论正负数都是“高(空缺)位”补0。有符号移动则是根据高位即符号位
,来补充空缺位。比如正数>> 则补0 , 负数>>则补1