File tree Expand file tree Collapse file tree 2 files changed +27
-25
lines changed
026_remove_duplicates_from_sorted_array Expand file tree Collapse file tree 2 files changed +27
-25
lines changed Original file line number Diff line number Diff line change @@ -7,13 +7,11 @@ static int removeDuplicates(int* nums, int numsSize)
77 return numsSize ;
88 }
99
10- int i = 0 , j , count = 1 ;
11- while (i < numsSize ) {
12- for (j = i + 1 ; j < numsSize && nums [i ] == nums [j ]; j ++ ) {}
13- if (j < numsSize ) {
14- nums [count ++ ] = nums [j ];
10+ int i , count = 1 ;
11+ for (i = 1 ; i < numsSize ; i ++ ) {
12+ if (nums [i - 1 ] != nums [i ]) {
13+ nums [count ++ ] = nums [i ];
1514 }
16- i = j ;
1715 }
1816
1917 return count ;
Original file line number Diff line number Diff line change 44
55int divide (int dividend , int divisor )
66{
7- int sign = (float ) dividend / divisor > 0 ? 1 : -1 ;
8- unsigned int dvd = dividend > 0 ? dividend : - dividend ;
9- unsigned int dvs = divisor > 0 ? divisor : - divisor ;
10- unsigned int bit_num [33 ];
11- unsigned int i = 0 ;
12- long long d = dvs ;
7+ int signal = 1 ;
8+ unsigned int dvd = dividend ;
9+ if (dividend < 0 ) {
10+ signal *= -1 ;
11+ dvd = ~dvd + 1 ;
12+ }
13+
14+ unsigned int dvs = divisor ;
15+ if (divisor < 0 ) {
16+ signal *= -1 ;
17+ dvs = ~dvs + 1 ;
18+ }
1319
14- bit_num [ i ] = d ;
15- while (d <= dvd ) {
16- bit_num [ ++ i ] = d = d << 1 ;
20+ int shift = 0 ;
21+ while (dvd > dvs << shift ) {
22+ shift ++ ;
1723 }
18- i -- ;
1924
20- unsigned int result = 0 ;
25+ unsigned int res = 0 ;
2126 while (dvd >= dvs ) {
22- if (dvd >= bit_num [i ]) {
23- dvd -= bit_num [i ];
24- result += (1 <<i );
25- } else {
26- i -- ;
27+ while (dvd < dvs << shift ) {
28+ shift -- ;
2729 }
30+ res |= (unsigned int ) 1 << shift ;
31+ dvd -= dvs << shift ;
2832 }
2933
30- //becasue need to return `int`, so we need to check it is overflowed or not.
31- if (result > INT_MAX && sign > 0 ) {
34+ if (signal == 1 && res >= INT_MAX ) {
3235 return INT_MAX ;
36+ } else {
37+ return res * signal ;
3338 }
34- return (int ) result * sign ;
3539}
3640
3741int main (int argc , char * * argv )
You can’t perform that action at this time.
0 commit comments