Skip to content

Commit c37f6e3

Browse files
committed
24-28
1 parent d52019c commit c37f6e3

11 files changed

+187
-0
lines changed

Diff for: README.md

+10
Original file line numberDiff line numberDiff line change
@@ -97,3 +97,13 @@ $=link=$: 题目原题链接
9797

9898
23.[两个列表的最小索引总和](https://leetcode-cn.com/problems/minimum-index-sum-of-two-lists/)[Java解法](https://github.com/DengBoCong/Algorithm/blob/master/core/MinimumIndexSumOfTwoLists/MinimumIndexSumOfTwoLists.java) | [Python解法](https://github.com/DengBoCong/Algorithm/blob/master/core/MinimumIndexSumOfTwoLists/MinimumIndexSumOfTwoLists.py)):题目难度(简单),题目类型(数组_哈希表_字符串)
9999

100+
24.[相交链表](https://leetcode-cn.com/problems/intersection-of-two-linked-lists/)[Java解法](https://github.com/DengBoCong/Algorithm/blob/master/core/IntersectionOfTwoLinkedLists/IntersectionOfTwoLinkedLists.java) | [Python解法](https://github.com/DengBoCong/Algorithm/blob/master/core/IntersectionOfTwoLinkedLists/IntersectionOfTwoLinkedLists.py)):题目难度(简单),题目类型(哈希表_链表_双指针)
101+
102+
25.[统计按位或能得到最大值的子集数目](https://leetcode-cn.com/problems/count-number-of-maximum-bitwise-or-subsets/)[Java解法](https://github.com/DengBoCong/Algorithm/blob/master/core/CountNumberOfMaximumBitwiseOrSubsets/CountNumberOfMaximumBitwiseOrSubsets.java) | [Python解法](https://github.com/DengBoCong/Algorithm/blob/master/core/CountNumberOfMaximumBitwiseOrSubsets/CountNumberOfMaximumBitwiseOrSubsets.py)):题目难度(中等),题目类型(位运算_数组_回溯)
103+
104+
26.[最优除法](https://leetcode-cn.com/problems/optimal-division/)[Java解法](https://github.com/DengBoCong/Algorithm/blob/master/core/OptimalDivision/OptimalDivision.java) | [Python解法](https://github.com/DengBoCong/Algorithm/blob/master/core/OptimalDivision/OptimalDivision.py)):题目难度(中等),题目类型(数组_数学_动态规划)
105+
106+
27.[增量元素之间的最大差值](https://leetcode-cn.com/problems/maximum-difference-between-increasing-elements/)[Java解法](https://github.com/DengBoCong/Algorithm/blob/master/core/MaximumDifferenceBetweenIncreasingElements/MaximumDifferenceBetweenIncreasingElements.java) | [Python解法](https://github.com/DengBoCong/Algorithm/blob/master/core/MaximumDifferenceBetweenIncreasingElements/MaximumDifferenceBetweenIncreasingElements.py)):题目难度(简单),题目类型(数组)
107+
108+
28.[复数乘法](https://leetcode-cn.com/problems/complex-number-multiplication/)[Java解法](https://github.com/DengBoCong/Algorithm/blob/master/core/ComplexNumberMultiplication/ComplexNumberMultiplication.java) | [Python解法](https://github.com/DengBoCong/Algorithm/blob/master/core/ComplexNumberMultiplication/ComplexNumberMultiplication.py)):题目难度(中等),题目类型(数学_字符串_模拟)
109+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.dbc;
2+
3+
public class ComplexNumberMultiplication {
4+
public String complexNumberMultiply(String num1, String num2) {
5+
String[] complex1 = num1.split("\\+|i");
6+
String[] complex2 = num2.split("\\+|i");
7+
int real1 = Integer.parseInt(complex1[0]);
8+
int imag1 = Integer.parseInt(complex1[1]);
9+
int real2 = Integer.parseInt(complex2[0]);
10+
int imag2 = Integer.parseInt(complex2[1]);
11+
return String.format("%d+%di", real1 * real2 - imag1 * imag2, real1 * imag2 + real2 * imag1);
12+
}
13+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
def complexNumberMultiply(num1: str, num2: str) -> str:
2+
def extract_num(num):
3+
if num[-1] != "i":
4+
return int(num), 0
5+
start, b_str = 0, ""
6+
for i in range(len(num) - 2, -1, -1):
7+
start = i
8+
b_str = num[i] + b_str
9+
if num[i] in ["+", "-"]:
10+
while num[start] in ["+", "-"]:
11+
start -= 1
12+
return 0 if start == -1 else int(num[:start + 1]), int(b_str)
13+
14+
num1_a, num1_b = extract_num(num1)
15+
num2_a, num2_b = extract_num(num2)
16+
res1 = num1_a * num2_a + num1_b * num2_b * -1
17+
res2 = num1_a * num2_b + num2_a * num1_b
18+
19+
return str(res1) + "+" + str(res2) + "i"
20+
21+
22+
if __name__ == '__main__':
23+
print(complexNumberMultiply(num1="1+1i", num2="1-1i"))
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.dbc;
2+
3+
public class CountNumberOfMaximumBitwiseOrSubsets {
4+
private int res = 0;
5+
private int maxOr = 0;
6+
private int[] nums;
7+
8+
private void dfs(int start, int curOr) {
9+
int tempOr = curOr;
10+
for (int i = start; i < this.nums.length; i++) {
11+
curOr = tempOr | this.nums[i];
12+
if (curOr > this.maxOr) {
13+
this.res = 1;
14+
this.maxOr = curOr;
15+
} else if (curOr == this.maxOr) {
16+
this.res++;
17+
}
18+
dfs(i + 1, curOr);
19+
}
20+
}
21+
22+
public int countMaxOrSubsets(int[] nums) {
23+
this.nums = nums;
24+
dfs(0, 0);
25+
return this.res;
26+
}
27+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
from typing import List
2+
3+
4+
def countMaxOrSubsets(nums: List[int]) -> int:
5+
length = len(nums)
6+
count, max_or = 0, 0
7+
8+
def dfs(start, cur_or):
9+
nonlocal count, max_or
10+
temp_or = cur_or
11+
for i in range(start, length):
12+
cur_or = temp_or | nums[i]
13+
if cur_or > max_or:
14+
count = 1
15+
max_or = cur_or
16+
elif cur_or == max_or:
17+
count += 1
18+
dfs(i + 1, cur_or)
19+
20+
dfs(0, 0)
21+
return count
22+
23+
24+
if __name__ == '__main__':
25+
print(countMaxOrSubsets([3, 2, 1, 5]))
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package com.dbc;
2+
3+
public class IntersectionOfTwoLinkedLists {
4+
public class ListNode {
5+
int val;
6+
ListNode next;
7+
8+
ListNode(int x) {
9+
val = x;
10+
next = null;
11+
}
12+
}
13+
14+
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
15+
if (headA == null || headB == null) {
16+
return null;
17+
}
18+
ListNode remainA = headA, remainB = headB;
19+
while (headA != headB) {
20+
headA = headA == null ? remainB : headA.next;
21+
headB = headB == null ? remainA : headB.next;
22+
}
23+
return headA;
24+
}
25+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
class ListNode:
2+
def __init__(self, x):
3+
self.val = x
4+
self.next = None
5+
6+
7+
def getIntersectionNode(headA: ListNode, headB: ListNode) -> ListNode:
8+
if headA is None or headB is None:
9+
return None
10+
remainA, remainB = headA, headB
11+
while headA != headB:
12+
headA = headB if headA is None else headA
13+
headB = headA if headB is None else headB
14+
15+
return headA
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.dbc;
2+
3+
public class MaximumDifferenceBetweenIncreasingElements {
4+
public int maximumDifference(int[] nums) {
5+
int minNum = nums[0], divNum = -1;
6+
for (int i = 1; i < nums.length; i++) {
7+
if (nums[i] > minNum && nums[i] - minNum > divNum) {
8+
divNum = nums[i] - minNum;
9+
}
10+
minNum = Math.min(minNum, nums[i]);
11+
}
12+
return divNum;
13+
}
14+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
from typing import List
2+
3+
4+
def maximumDifference(nums: List[int]) -> int:
5+
min_num, div_num = nums[0], -1
6+
for i in range(1, len(nums)):
7+
if nums[i] > min_num and nums[i] - min_num > div_num:
8+
div_num = nums[i] - min_num
9+
min_num = min_num if min_num < nums[i] else nums[i]
10+
11+
return div_num

Diff for: core/OptimalDivision/OptimalDivision.java

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.dbc;
2+
3+
public class OptimalDivision {
4+
public String optimalDivision(int[] nums) {
5+
if (nums.length == 1) return "" + nums[0];
6+
if (nums.length == 2) return nums[0] + "/" + nums[1];
7+
StringBuffer res = new StringBuffer();
8+
res.append(nums[0] + "/(");
9+
for (int i = 1; i < nums.length - 1; i++) {
10+
res.append(nums[i] + "/");
11+
}
12+
res.append(nums[nums.length - 1] + ")");
13+
return res.toString();
14+
}
15+
}

Diff for: core/OptimalDivision/OptimalDivision.py

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
from typing import List
2+
3+
4+
def optimalDivision(nums: List[int]) -> str:
5+
if len(nums) == 1:
6+
return str(nums[0])
7+
if len(nums) == 2:
8+
return f"{nums[0]}/{nums[1]}"
9+
return f"{nums[0]}/({'/'.join(map(str, nums[1:]))})"

0 commit comments

Comments
 (0)