ARTS_week11

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 = 3

Output: [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)初始化列表中不能含有基类的对象构造。

你可能感兴趣的:(ARTS_week11)