
题意:编写一个方法,找出两个数字a和b中最大的那一个。不得使用if-else或其他比较运算符。
解法1:
1.这道题看似很简单,但是考察的知识点很多,可以多方面去解题
2.首先最简单的解法就是使用Math.max函数,但是我们也知道,不符合题意哦!!!因为max源码就是通过比较符去得到最大值的。
解法2:
1.解这道题的关键点在于,我们不知道a-b的正负,我们怎么知道一个数字的正负呢?
2.首先想到的是,java的移位操作,如果(long)右移63位、(int)右移31位,这时的结果不就是我们迫切想知道的正负吗?
3.由于a、b为int型,所以a-b很有可能超过int,我们把结果声明为long
4.求得符号位之后(-1 or 0),然后求最大值就简单很多了
5.切记,这时a-b时,a和b必须都强转为long

解法3:
使用数学公式max = (a + b + abs(a - b)) / 2
解题遇到的问题
无
后续需要总结学习的知识点
无
##解法1
class Solution {
public int missingNumber(int[] nums) {
int k = nums.length, k1 = 0;
for (int i = 0; i < nums.length; i++) {
k = k ^ i;
k1 = k1 ^ nums[i];
}
return k ^ k1;
}
}
网友评论