Skip to content

Commit 3361031

Browse files
committed
update
1 parent 5678180 commit 3361031

File tree

2 files changed

+64
-11
lines changed

2 files changed

+64
-11
lines changed

src/main/java/com/fibers/algorithm/leetcode/_18/Solution.java

+38-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package com.fibers.algorithm.leetcode._18;
22

33
import java.util.ArrayList;
4+
import java.util.Arrays;
45
import java.util.List;
6+
import com.fibers.utils.Utils;
57

68
/*
79
* @lc app=leetcode.cn id=18 lang=java
@@ -11,13 +13,47 @@
1113

1214
// @lc code=start
1315
class Solution {
16+
public static void main(String[] args) {
17+
Solution s = new Solution();
18+
// Utils.printNestList(s.fourSum(new int[] {1, 0, -1, 0, -2, 2}, 0));
19+
}
20+
1421
public List<List<Integer>> fourSum(int[] nums, int target) {
15-
List<List<Integer>> results = new ArrayList<>();
16-
if (nums == null || nums.length == 0) {
22+
List<List<Integer>> results = new ArrayList<List<Integer>>();
23+
if (nums == null || nums.length < 4) {
1724
return results;
1825
}
1926

27+
Arrays.sort(nums);
28+
29+
for (int i = 0; i < nums.length - 2; i++) {
30+
if (i != 0 && nums[i] == nums[i - 1]) {
31+
continue;
32+
}
33+
for (int j = i + 1; j < nums.length; j++) {
34+
if (j != i + 1 && nums[j] == nums[j - 1]) {
35+
continue;
36+
}
2037

38+
int left = j + 1;
39+
int right = nums.length - 1;
40+
41+
while (left < right) {
42+
if ((left != j + 1 && nums[left] == nums[left - 1])
43+
|| nums[i] + nums[j] + nums[left] + nums[right] < target) {
44+
left++;
45+
} else if ((right != nums.length - 1 && nums[right] == nums[right + 1])
46+
|| nums[i] + nums[j] + nums[left] + nums[right] > target) {
47+
right--;
48+
} else {
49+
results.add(Arrays.asList(nums[i], nums[j], nums[left], nums[right]));
50+
// 满足条件的,进入下一次遍历
51+
left++;
52+
right--;
53+
}
54+
}
55+
}
56+
}
2157
return results;
2258
}
2359
}
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,41 @@
11
package com.fibers.algorithm.leetcode._29;
22

3+
4+
/*
5+
* @lc app=leetcode.cn id=29 lang=java
6+
*
7+
* [29] 两数相除
8+
*/
9+
// @lc code=start
310
public class Solution {
411

512
public static void main(String[] args) {
613
Solution s = new Solution();
7-
System.out.println(s.divide(-1, 1));
14+
System.out.println(s.divide(-2147483648, 1));
815
}
916

1017
public int divide(int dividend, int divisor) {
11-
boolean sign = (dividend > 0) ^ (divisor < 0);
18+
if (dividend == 0) {
19+
return 0;
20+
}
21+
22+
if (dividend == Integer.MIN_VALUE && divisor == -1) {
23+
return Integer.MAX_VALUE;
24+
}
25+
26+
boolean sign = (dividend ^ divisor) < 0;
1227

13-
dividend = dividend > 0 ? dividend : 0 - dividend;
14-
divisor = divisor > 0 ? divisor : 0 - divisor;
28+
long absDividend = Math.abs((long) dividend);
29+
long absDivisor = Math.abs((long) divisor);
1530

1631
int result = 0;
17-
while (dividend >= divisor) {
18-
dividend -= divisor;
19-
result++;
32+
for (int i = 31; i >= 0; i--) {
33+
if ((absDividend >> i) >= absDivisor) {
34+
result += 1 << i;
35+
absDividend -= absDivisor << i;
36+
}
2037
}
21-
22-
return sign ? result : 0 - result;
38+
return sign ? 0 - result : result;
2339
}
2440
}
41+
// @lc code=end

0 commit comments

Comments
 (0)