Skip to content

Commit 022a196

Browse files
Refine
Signed-off-by: begeekmyfriend <begeekmyfriend@gmail.com>
1 parent 0b2f18d commit 022a196

File tree

2 files changed

+27
-25
lines changed

2 files changed

+27
-25
lines changed

026_remove_duplicates_from_sorted_array/rm_dup.c

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff 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;

029_divide_two_integers/divide.c

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4,34 +4,38 @@
44

55
int 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

3741
int main(int argc, char **argv)

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy