深度学习训练占用GPU和CPU之余可以干什么?
- 更多题解请见本系列目录
- 打开Chrome和Edge浏览器,一个用来刷力扣,一个用来写CSDN。
- 关闭PDF阅读器,暂时不读paper。
- 关闭pycharm,使用控制台训练。
- 使用任务管理器看完内存占用后,一切正常,关闭任务管理器。
- 尽可能的少打开网页,从平时使用电脑时考虑时间和空间复杂度。
- 以上情况尽可能的减少系统进程和线程。
Tips
- 在两个数组的尾部有数的部分来设置指针
- 主要难点在于如何设置边界条件
- 四种语言大同小异
Python
class Solution:
def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
"""
Do not return anything, modify nums1 in-place instead.
"""
pm, pn, p = m-1, n-1, n+m-1
while pm>=0 or pn>=0:
if pm == -1:
nums1[p] = nums2[pn]
pn -= 1
elif pn==-1:
nums1[p] = nums1[pm]
pm -= 1
elif nums1[pm]>nums2[pn]:
nums1[p] = nums1[pm]
pm -= 1
else:
nums1[p] = nums2[pn]
pn -= 1
p -= 1
C++
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
int pm=m-1, pn=n-1, p=n+m-1;
while (pm>=0 || pn>=0)
{
if (pm == -1)
{nums1[p] = nums2[pn]; pn -= 1;}
else if (pn==-1)
{nums1[p] = nums1[pm];pm -= 1;}
else if (nums1[pm]>nums2[pn])
{nums1[p] = nums1[pm];pm -= 1;}
else
{nums1[p] = nums2[pn];pn -= 1;}
p -= 1;
}
}
};
C#
public class Solution {
public void Merge(int[] nums1, int m, int[] nums2, int n) {
int pm=m-1, pn=n-1, p=n+m-1;
while(pm>=0 || pn>=0)
{
if (pm == -1)
{nums1[p] = nums2[pn]; pn -= 1;}
else if (pn==-1)
{nums1[p] = nums1[pm];pm -= 1;}
else if (nums1[pm]>nums2[pn])
{nums1[p] = nums1[pm];pm -= 1;}
else
{nums1[p] = nums2[pn];pn -= 1;}
p -= 1;
}
}
}
Java
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
int pm=m-1, pn=n-1, p=n+m-1;
while(pm>=0 || pn>=0)
{
if (pm == -1)
{nums1[p] = nums2[pn]; pn -= 1;}
else if (pn==-1)
{nums1[p] = nums1[pm];pm -= 1;}
else if (nums1[pm]>nums2[pn])
{nums1[p] = nums1[pm];pm -= 1;}
else
{nums1[p] = nums2[pn];pn -= 1;}
p -= 1;
}
}
}