最小的L2损失

小张用某种仪器获得了一组观测值A,A长度为n,A中每一个数都是0-255之间的整数。但是观测值A存在一定的误差,现在小张想求得最可能的真实值B,使得:

  • B中的每一个数都是0-255的整数且与A长度相同
  • 0< = B(i+1) -B(i) <= 3( 0 <= i < n-1)
  • A和B之间的L2损失最小(A(i)和B(i)差的平方的和最小)
    要求返回最小的L2损失。

输入第一行是数据长度n(0<n<1000)
第二行是n个0-255之间的整数
返回一个整数表示L2损失

例子:

输入:
5
1 2 3 6 10

返回
1

c++实现

#include<vector>
#include<stdlib.h>
#include<stdio.h>
#include<iostream>
#include <math.h>

using namespace std;

int minLoss(int n, vector<int> A)
{
    int sumLoss = 0;
    vector<int> B(n, 0);//初始化B
    B[0] = A[0];
    for (int i = 1; i < A.size(); i++)
    {
        if (A[i] - B[i - 1] > 3)
        {
            B[i] = B[i-1] + 3;
            sumLoss += pow(A[i] - B[i],2);
        }
        else if (A[i] - B[i - 1] < 0)
        {
            B[i] = B[i - 1];
            sumLoss += pow(A[i] - B[i], 2);
        }
        else
        {
            B[i] = A[i];
        }
    }
    return sumLoss;
}

int main()
{
    int n;
    cin >> n;//第一个输入是数据长度n

    vector<int> A;
    for (int i = 0; i < n; i++)
    {
        int temp;
        scanf_s("%d", &temp);//依次输入观测值A
        A.push_back(temp);
    }

    int res = minLoss(n, A);
    printf("min L2 loss is : %d", res);

    system("pause");
    return 0;
}
示例1

运行结果
示例2

运行结果
示例3
运行结果
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 专业考题类型管理运行工作负责人一般作业考题内容选项A选项B选项C选项D选项E选项F正确答案 变电单选GYSZ本规程...
    小白兔去钓鱼阅读 9,070评论 0 13
  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 3,428评论 0 2
  • "use strict";function _classCallCheck(e,t){if(!(e instanc...
    久些阅读 2,061评论 0 2
  • 今天看了下小王子这本书,看的似懂非懂,人生哲理可能太深奥了。不过看完后,有几点书中讲到的,大概明白了: 1.狐狸说...
    聪_明阅读 445评论 0 1
  • 我有一个高中同学,毕业十年重聚时才互加微信联系上。一直工作生活在大连的他应该是圈子里知名的作家了。前几天看到他发了...
    柳絮儿满天飘阅读 178评论 0 1