Day 2

1.牛牛的快递(pass)

牛牛的快递

1.1解析

在这里插入图片描述

1.2代码

#include <iostream>
#include <cmath>
using namespace std;

int main() {
    float a;
    char b;
    cin>>a>>b;
    int price=0;//结果
    if(b=='y')price+=5;//加急
    if(a<=1.0) cout<<(price+20);
    else 
    {
        price+=20;//先加上起步价
        a--;
        //price+=ceil(a);//向上取整函数
        if(a-(int)a>0)price+=(int)a+1;
        else price+=(int)a;
        cout<<price;
    }
}

2.最小花费爬楼梯 (pass)

最小花费爬楼梯
技能:线性dp

2.1解析

在这里插入图片描述

2.2代码

#include <iostream>
#include <vector>
using namespace std;

int main() {
    int n=0;
    cin>>n;
    vector<int> cost(n);
    for(int i=0;i<n;i++)
        cin>>cost[i];
    
    vector<int> dp(n+1);
    for(int i=2;i<=n;i++)
        dp[i]=min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]);
    cout<<dp[n];
}

3.数组中两个字符串的最小距离 (pass)

数组中两个字符串的最小距离
技能:哈希、双指针、字符串

3.1解析

在这里插入图片描述

在这里插入图片描述

3.2代码

//运行超时了
//O(N^2)
#include <iostream>
#include<vector>
#include<limits.h>
using namespace std;

int main() {
    int n=0;
    cin>>n;
    string str1,str2;
    cin>>str1>>str2;
    vector<string> strs(n);
    for(auto& str:strs) cin>>str;

    int ret=INT_MAX;
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
            if((strs[i]==str1&&strs[j]==str2)||(strs[i]==str2&&strs[j]==str1))
                ret=min(ret,abs(i-j));
    }
    if(ret==INT_MAX)cout<<-1;
    else
    cout<<ret;
}
//优化->时间复杂度:O(N)
#include <iostream>
#include<vector>
#include<limits.h>
using namespace std;

int main() {
    int n=0;
    cin>>n;
    string str1,str2;
    cin>>str1>>str2;
    vector<string> strs(n);
    for(auto& str:strs) cin>>str;

    int prev1=-1,prev2=-1,ret=INT_MAX;
    for(int i=0;i<n;i++)
    {
        if(strs[i]==str1)//向前找最近的str2
        {
            prev1=i;
            if(prev2!=-1)
                ret=min(ret,prev1-prev2);
        }
        if(strs[i]==str2)//向前找最近的str1
        {
            prev2=i;
            if(prev1!=-1)
                ret=min(ret,prev2-prev1);
        }
    }
    if(prev1==-1||prev2==-1)//判断str1/str2是否存在
        cout<<-1;
    else
        cout<<ret;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值