Skip to content

Commit 6446bdd

Browse files
committed
801
1 parent 06a19d9 commit 6446bdd

File tree

3 files changed

+105
-2
lines changed

3 files changed

+105
-2
lines changed

.idea/leetcode-pro/editor.xml

Lines changed: 12 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/leetcode-pro/statistics.xml

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
package main
2+
3+
import "testing"
4+
5+
/**
6+
<p>我们有两个长度相等且不为空的整型数组&nbsp;<code>nums1</code>&nbsp;和&nbsp;<code>nums2</code>&nbsp;。在一次操作中,我们可以交换&nbsp;<code>nums1[i]</code>&nbsp;和&nbsp;<code>nums2[i]</code>的元素。</p>
7+
8+
<ul>
9+
<li>例如,如果 <code>nums1 = [1,2,3,<u>8</u>]</code> , <code>nums2 =[5,6,7,<u>4</u>]</code> ,你可以交换 <code>i = 3</code> 处的元素,得到 <code>nums1 =[1,2,3,4]</code> 和 <code>nums2 =[5,6,7,8]</code> 。</li>
10+
</ul>
11+
12+
<p>返回 <em>使 <code>nums1</code> 和 <code>nums2</code> <strong>严格递增&nbsp;</strong>所需操作的最小次数</em> 。</p>
13+
14+
<p>数组&nbsp;<code>arr</code>&nbsp;<strong>严格递增</strong> 且&nbsp;&nbsp;<code>arr[0] &lt; arr[1] &lt; arr[2] &lt; ... &lt; arr[arr.length - 1]</code>&nbsp;。</p>
15+
16+
<p><b>注意:</b></p>
17+
18+
<ul>
19+
<li>用例保证可以实现操作。</li>
20+
</ul>
21+
22+
<p>&nbsp;</p>
23+
24+
<p><strong>示例 1:</strong></p>
25+
26+
<pre>
27+
<strong>输入:</strong> nums1 = [1,3,5,4], nums2 = [1,2,3,7]
28+
<strong>输出:</strong> 1
29+
<strong>解释: </strong>
30+
交换 A[3] 和 B[3] 后,两个数组如下:
31+
A = [1, 3, 5, 7] , B = [1, 2, 3, 4]
32+
两个数组均为严格递增的。</pre>
33+
34+
<p><strong>示例 2:</strong></p>
35+
36+
<pre>
37+
<strong>输入:</strong> nums1 = [0,3,5,8,9], nums2 = [2,1,4,6,9]
38+
<strong>输出:</strong> 1
39+
</pre>
40+
41+
<p>&nbsp;</p>
42+
43+
<p><strong>提示:</strong></p>
44+
45+
<ul>
46+
<li><code>2 &lt;= nums1.length &lt;= 10<sup>5</sup></code></li>
47+
<li><code>nums2.length == nums1.length</code></li>
48+
<li><code>0 &lt;= nums1[i], nums2[i] &lt;= 2 * 10<sup>5</sup></code></li>
49+
</ul>
50+
51+
<div><details><summary>Related Topics</summary><div><li>数组</li><li>动态规划</li></div></details></div>
52+
<div><li>👍 371</li><li>👎 0</li></div>
53+
*/
54+
55+
func TestMinSwap(t *testing.T) {
56+
t.Log(minSwap([]int{1, 3, 5, 4}, []int{1, 2, 3, 7}))
57+
t.Log(minSwap([]int{0, 3, 5, 8, 9}, []int{2, 1, 4, 6, 9}))
58+
}
59+
60+
//leetcode submit region begin(Prohibit modification and deletion)
61+
func minSwap(nums1 []int, nums2 []int) int {
62+
dp := make([][2]int, len(nums1))
63+
dp[0][0] = 0
64+
dp[0][1] = 1
65+
for i := 1; i < len(nums1); i++ {
66+
a1 := nums1[i-1]
67+
a2 := nums1[i]
68+
b1 := nums2[i-1]
69+
b2 := nums2[i]
70+
71+
if (a1 < a2 && b1 < b2) && (a1 < b2 && b1 < a2) {
72+
dp[i][0] = min(dp[i-1][0], dp[i-1][1])
73+
dp[i][1] = min(dp[i-1][0], dp[i-1][1]) + 1
74+
} else if a1 < a2 && b1 < b2 {
75+
dp[i][0] = dp[i-1][0]
76+
dp[i][1] = dp[i-1][1] + 1
77+
} else {
78+
dp[i][0] = dp[i-1][1]
79+
dp[i][1] = dp[i-1][0] + 1
80+
}
81+
}
82+
return min(dp[len(nums1)-1][0], dp[len(nums1)-1][1])
83+
}
84+
func min(a, b int) int {
85+
if a > b {
86+
return b
87+
}
88+
return a
89+
}
90+
91+
//leetcode submit region end(Prohibit modification and deletion)

0 commit comments

Comments
 (0)