• 动态规划


    1.从斐波纳契数列开始

    //a.传统的递归实现
    
    /*int fib(int n)             
    {
      if(n==0 || n==1)
        return 1;
      else
       return fib(n-1)+fib(n-2); 
    
    }*/
    
    //b.保存每次已计算的数字
    
    int fib(int n,map<int,int> fib_map)
    {
      
      if(n==0 || n==1)
        return 1;
      else
      {
        map<int,int>::iterator iter = fib_map.find(n);
        if(iter==fib_map.end())
        {
          fib_map[n]=fib(n-1,fib_map)+fib(n-2,fib_map);
          return fib_map[n];
        }else
        
          return fib_map[n];
        
      }
    }

     动态规划适用于一个问题可以利用  它的同一类型,规模变小+ 转移的状态  来求解

    class Solution {  
    public:  
        int lengthOfLIS(vector<int>& nums) {  
            int i, j, len = 1, SIZE = nums.size();  
      
        if(!nums.size())    //防止数组为空  
            return 0;  
      
        vector<int> D(SIZE, 1);  
      
        for(i = 1; i < SIZE; ++i)  
        {  
            for(j = 0; j <= i - 1; ++j)  
            {  
                if(nums[j] < nums[i] && D[j] + 1 > D[i]) //递增序列,若求非降子序列,改nums[j] <= nums[i]  
                    D[i] = D[j] + 1;  
      
                if(len < D[i])  
                len = D[i];  
            }  
        }  
      
        return len;  
        }  
    };  

    求最长回文字符串

    string longestPalindrome(string s) 
    {
        int psize=s.size();
        int begin=0,maxlen=1;
        vector<vector<bool>> ispali(psize,vector<bool>(psize,false));
        for(int i=0;i<psize-1;i++)
        {
            ispali[i][i]=true;
            
            if(s[i+1]==s[i])
            {
              ispali[i][i+1]=true;
              begin=i;
              maxlen=2;
            }
        }
        ispali[psize-1][psize-1]=true;
        for(int len=3;len<=psize;len++)
        {
          for(int i=0;i<psize-2;i++)
          {
            int j=min((i+len-1),psize-1);
            if( (ispali[i+1][j-1]) && (s[i]==s[j]))
            {
               ispali[i][j]=true;
               begin=i;
               maxlen=j-i+1;
            }
    
          }
        }
    
    
    return s.substr(begin, maxlen);     
    
    }
  • 相关阅读:
    search支持多种标签
    二级导航样式
    内容页与首页列表页调用点击数量
    常用标签
    20随机验证码
    19.请输入整数
    18.自定义过滤器表头排序
    17.js实现金山打字
    16.简单的自定义指令
    OC学习笔记 面向对象 继承与组合
  • 原文地址:https://www.cnblogs.com/chenbaoliang/p/7236231.html
Copyright © 2020-2023  润新知