今儿和昨儿一起总结吧,鉴于昨天学的实在是少了些……

  首先是leetcode的题——盛水最多的容器,显然我用了最笨的方法,时间必然不能通过……看了答案是动态规划,噫,这是个什么鬼……
我的辣鸡代码……

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
class Solution {
public:
    int maxArea(vector<int>& height) 
    {
        int num=height.size();
        int area;int ans=0;
        for(int i=0;i<num;i++)
        {
           for(int j=i+1;j<num;j++)
           {
               area=(j-i)*min(height[i],height[j]);
               ans=max(ans,area);
           }
        }
        return ans;
    }
};

  感觉动态规划好玄幻……看到一个不是动态规划的,但是类似??就是两个指针分别置于两端,移动的同时记录一下面积,两个指针中,值较小的向内移动,所以就是++i或者是--j……

  大神的答案如下……

 1 class Solution {
 2 public:
 3     int maxArea(vector<int>& height) {
 4         if(height.size() <= 1) return -1;
 5         int i = 0, j = height.size() - 1, res = 0;
 6         while(i < j){
 7             int h = min(height[i], height[j]);
 8             res = max(res, h * (j - i));
 9             if(height[i] < height[j]) ++i;
10             else --j;
11         }
12         return res;
13     }
14 };

  

  这道题真的非常有趣!大概有助于提高智商吧……
  第二道题是Int trans to Roma……
  老娘的笨方法居然通过了,成果还行……但是估计客户经理看了想打人……

 1 class Solution {
 2 public:
 3     string intToRoman(int num) 
 4     {
 5      if(num<1||num>3999)
 6          return 0;
 7      int a[4]; 
 8     string ans;
 9      a[0]=num/1000;
10      for(int i=0;i<a[0];i++)
11         {ans+='M';}
12      num=num-a[0]*1000;     
13      a[1]=num/100;   
14      if(a[1]<4)
15      {for(int j=0;j<a[1];j++)
16          {ans+='C';}} 
17     else if(a[1]==4)
18         ans+="CD";
19      else if(a[1]>=5&&a[1]<9)
20      {
21          ans+='D';
22          for(int m=0;m<a[1]-5;m++)
23          {ans+='C';}
24      }
25      else if(a[1]==9)
26          ans+="CM";
27      num=num-a[1]*100;   
28      a[2]=num/10;
29         if(a[2]<4)
30      {for(int j=0;j<a[2];j++)
31          {ans+='X';}} 
32     else if(a[2]==4)
33         ans+="XL";
34      else if(a[2]>=5&&a[2]<9)
35      {
36          ans+='L';
37          for(int n=0;n<a[2]-5;n++)
38          {ans+='X';}
39      }
40      else if(a[2]==9)
41          ans+="XC";
42      a[3]=num-a[2]*10;
43     if(a[3]<4)
44      {for(int j=0;j<a[3];j++)
45           {ans+='I';}} 
46     else if(a[3]==4)
47         ans+="IV";
48      else if(a[3]>=5&&a[3]<9)
49      {
50          ans+='V';
51          for(int p=0;p<a[3]-5;p++)
52          {ans+='I';}
53      }
54      else if(a[3]==9)
55          ans+="IX";
56     return ans;
57     }
58 };

  

  然后照例看看大神的答案,十行不到吊打我六十行!!
  帅气!!

 1 class Solution {
 2 public:
 3     string intToRoman(int num) {
 4         int values[]={1000,900,500,400,100,90,50,40,10,9,5,4,1};
 5         string reps[]={"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};  
 7         string res;
 8         for(int i=0; i<13; i++){
 9             while(num>=values[i]){
10                 num -= values[i];
11                 res += reps[i];
12             }
13         }
14         return res;
15     }
16 };

  之前听人说,法语中的84是两个四十加四个一这样类似,英文一万三是一三个一千……大概还是地地道道的中国人吧,还是个十百千万的数数,对于转换罗马字符这种,更像是加减运算,减去一个1000,减去一个900……学习一下……然后建立两个数组,对应添加元素,感觉好聪明啊!比if语句排排坐好多了……

  看了看论文中的图像算法中的空间域和频域的转换……理解不了……大概只知道通过转化为能量分布形式,能检测出基频和高频,有助于选择阈值???区分背景和杂物??我理解的就这个层面了……那个作者后面也是写了阈值的选择……

  最大类间方差阈值分割法

  意思大概是统计出各个灰度i出现的概率pi,设定一个阈值t,i=0~t时,属于A类,t~255属于B类,然后分别计算A类和B类中的平均灰度以及全局灰度,然后计算A和B中的类间方差,多试几次t之,选择最大类间方差,即为能将背景和主体分清的最佳阈值。数学知识放在下面那张图上面了……都是概率论的知识……

 2019-04-23学习笔记 随笔 第1张

2019-04-23学习笔记 随笔 第2张

 

   二维最大熵阈值分割方法

      这个我看不懂……明儿细查查……

  

 

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄