Python solves the problem of lintcode astatb timeout
topic description
lintcode aquib problem
sources of topics and their own ideas
https://www.lintcode.com/prob...
Code
def aplusb(self, a, b):
-sharp write your code here
while True:
a, b = a^b, (a&b)<<1
if a==0 or b == 0:
return a or b
Why does the code time out when await murb? by the same logic, there is no timeout with Java
public int aplusb(int a ,int b) {
// write your code here, try to do it without arithmetic operators.
while(true){
int x = a^b; //
int y = (a&b)<<1; //
if(x==0){
return y;
}
if (y==0){
return x;
}
a=x;
b=y;
} // while
}
< H2 > original code, inverse code and complement < / H2 >
We plastic data
take octet
as an example
then use the integer 5
to give an example:
- original code: 0000 0101
- reverse code: 1111 1010
- complement: 1111 1011
and complement is negative in the computer binary representation
< H2 > shift operation < / H2 >
<
and >
simply move the specified number of digits to the left or right, the vacancy is filled with 0 or 1, and the overflow will be discarded
< H2 > back to the question < / H2 >
1. Calculate a ^ b
(take + 5,-5 as examples
)
and a
and -a
perform XOR operations
to get 1111 1110
, that is, -2
calculation process:
take 5
(0000 0101) and -5
(1111 1011) as examples
XOR operation to get 1111 1110
1111 1110
minus 1
to get 1111
11111101
take the reverse code 00000010
to get 2
and then add the original minus sign
that is -2
2. Calculate (aqb) < < 1
(take + 5,-5 as an example
)
and a
and b
perform and operations
to get 0000 0001
and then move one bit to the left
to get 0000 0010
that is, 2
calculation process:
also take 5
(0000 0101) and -5
(1111 1011) as examples
and after
get 0000 0001
and then move one bit to the left
to get 0000 0010
, that is, 2
3.So
as you can see, "any"
one set of opposite numbers , running a cycle will get another set of opposite numbers
So, this group of opposite numbers
run again, get another set of opposite numbers .
So if the loop goes on indefinitely, of course it will time out.
you can add in your code that if the absolute values of an and b are equal , then they are directly equal to 0
. Actually, there is a certain pattern. I don't want to explore
print(a, b),
.