A
LeetCode:
88. Merge Sorted Array
Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array.
Note:
The number of elements initialized in nums1 and nums2 are m and n respectively.
You may assume that nums1 has enough space (size that is greater or equal to m + n) to hold additional elements from nums2.
Example:
Input:
nums1 = [1,2,3,0,0,0], m = 3
nums2 = [2,5,6], n = 3Output: [1,2,2,3,5,6]
本体仍然为一道双指针的题目,但初始思路仍然是选择合并后再排序,效率过低。于是看了写别人的题解评论,改用从尾部至头部的顺序遍历,选大值放入——原因在于原数组末位置为0,巧妙。
我的代码:
class Solution {
public:
void merge(vector& nums1, int m, vector& nums2, int n) {
if(nums2.empty()){return;}
vector::iterator i, j, k = nums1.begin() + m + n - 1;
for(i = nums1.begin() + m - 1, j = nums2.begin() + n - 1;
i >= nums1.begin() - 1, j >= nums2.begin() - 1,
k >= nums1.begin();) {
if(j < nums2.begin()) {break;}
if(i < nums1.begin()) {
for(; j >= nums2.begin(); j--, k--) {
*k = *j;
}
break;
}
if(*i > *j) {*k = *i; i--;k--;} else {*k = *j; j--;k--;}
}
}
};
运行结果:
Runtime: 4 ms, faster than 96.81% of C++ online submissions for Merge Sorted Array.
Memory Usage: 8.9 MB, less than 47.74% of C++ online submissions for Merge Sorted Array.
运行速度较好,但空间消耗较大,应该是for
循环嵌套的缘故。
他人的精简版代码:
class Solution {
public:
void merge(vector& nums1, int m, vector& nums2, int n) {
int p=0;
p=m+n-1;
m--;n--;
for(int i=p;i>=0;i--)
{
if(m<0){nums1[i]=nums2[n];n--;}
else if(n<0) {return;}
else if(nums1[m]>nums2[n])
{
nums1[i]=nums1[m];
m--;
}
else
{
nums1[i]=nums2[n];
n--;
}
}
}
};
最大的不同之处在于:```for```循环中,我设定的变量值过多,调整的灵活性较低;而该作者的代码减少了变量值的更新,可以较灵活地更改功能。
R
Tempted to cheat on a written exam? Artificial intelligence is 90% certain to nab you!
本周的文章主题为AI能够较准确地识别书面上的考试作弊行为。
- 研究小组:DIKU-DABAI (Danish Center for Big Data Analytics driven Innovation),由Stephen Alstrup教授领导。
- 方法:利用了孪生神经网络来区分两份文本的写作风格。
- 训练过程:对该孪生神经网络进行大量训练以学习其写作风格,再学生每次提交作业时,会将其所提交的内容与以往提交的作业相比较,并返回一个能够显示相似程度的百分比,以体现写作风格的相似性。此方法能够有效防止代写等作弊行为~~~
T
本周学习:决策树
-
决策树:
目的:分类
缺陷:容易出现过拟合
-
过拟合:多项式拟合(想象力过于丰富)
过拟合解决方案:剪枝——提高泛化性能,即减弱过拟合的影响
剪枝:分为预剪枝(生成树的过程中检验节点)和后剪枝(树生成后再检验节点)参考链接:决策树、过拟合
S
临近紧张刺激的期末考试,努力复习ing~
- 复习时遇到的一些小问题:
在派生类的构造函数中,
1)构造顺序为:基类构造-->对象构造-->派生类构造;
2)初始化列表中不能含有基类的对象构造。