加载中...

虾皮秋招9.16笔试Ak 希望有面试

class Solution {
public:
    /**
     * Note: 类名、方法名、参数名已经指定,请勿修改
     *
     * 
     * 
     * @param grid int整型 vector<vector<>> 
     * @return int整型
     */
    int minPathSum(vector<vector<int> >& grid) {

        // write code here
        int n=grid.size();
        if(n==0) return 0;
        int m=grid[0].size();
        // cout<<n<<" "<<m;
        // vector<vector<int>>v=
        vector<vector<int>>f(n,vector<int>(m,0));
        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++){
                f[i][j]=grid[i][j];
                if(i==0&&j==0) continue;
                else if(i==0) f[i][j]+=f[i][j-1];
                else if(j==0) f[i][j]+=f[i-1][j];
                else {
                    f[i][j]+=min(f[i-1][j],f[i][j-1]);
                }
            }
        }
        // cout<<f[n-1][j-1];
        return f[n-1][m-1];
    }
};

2


class Solution {
public:
    /**
     * Note: 类名、方法名、参数名已经指定,请勿修改
     *
     * 
     * 
     * @param goods_list int整型 vector 商品价值
     * @param balance int整型  余额
     * @return int整型
     */
    int pickGoods(vector<int>& goods_list, int balance) {
        int n=goods_list.size();
        vector<int>f(balance+1);
        for(int i=0;i<n;i++){
            for(int j=balance;j>=goods_list[i];j--){
                f[j]=max(f[j],f[j-goods_list[i]]+goods_list[i]);
            }
        }
        cout<<f[balance];
        return f[balance];
        // write code here
    }
};

3


class Solution {
public:
    /**
     * Note: 类名、方法名、参数名已经指定,请勿修改
     *
     * 
     * 计算摆动序列的最长子序列的长度
     * @param nums int整型 vector 摆动序列
     * @return int整型
     */
    int wiggleMaxLength(vector<int>& nums) {
        
        // write code here
        int n=nums.size();
        vector<vector<int>>f(n,vector<int>(2,1));//以nums[i]为终点的点 减前面前一个符号是负数0 正号1的答案
        // cout<<"a";
        for(int i=0;i<nums.size();i++){
            if(i==0) f[i][0]=f[i][1]=1;
            else if(i==1){
                if(nums[1]!=nums[0]){
                    if(nums[1]-nums[0]>0)
                    {
                        f[i][1]=2;//正数
                        // f[i][1]=1;
                    }
                    if(nums[1]-nums[0]<0){
                        f[i][0]=2;//负数
                    }
                    
                }
                
                else 
                f[i][0]=f[i][1]=1;//相等就只能是他自己
            } 
            else
            for(int j=0;j<i;j++){
                if(nums[i]-nums[j]>0){
                    f[i][1]=max(f[i][1],f[j][0]+1);
                }else if(nums[i]-nums[j]<0){
                    f[i][0]=max(f[i][0],f[j][1]+1);
                }
                
            }
        }
        int res=0;
        // cout<<"b";
        for(int i=0;i<nums.size();i++){
            for(int j=0;j<2;j++){
                // cout<<f[i][j]<<" ";
                res=max(f[i][j],res);
            }
            // cout<<endl;
        }
        return res;
    }
};

posted @ 2024-09-14 17:10  liang302  阅读(5)  评论(0编辑  收藏  举报