LeetCode AutoX 安途智行专场竞赛题解

Posted 沉迷单车的追风少年

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode AutoX 安途智行专场竞赛题解相关的知识,希望对你有一定的参考价值。

前言:今天下午正好有空,再打一场周赛吧。

模拟:AutoX-1. 网页瀑布流

这题的思路应该是每次填补最小的那个数,所以我们每次填补后排序,返回操作完成后的最大值即可。

class Solution 
public:
    int getLengthOfWaterfallFlow(int num, vector<int>& block) 
        if (num >= block.size()) 
            sort(block.begin(), block.end());
            return block[block.size() - 1]; 
        
        vector<int> temp(block.begin(), block.begin() + num);
        sort(temp.begin(), temp.end());
        int ans = temp[0];
        if (num > block.size()) 
            return ans;
        
        for (int i = num; i < block.size(); i++) 
            temp[0] += block[i];
            if (temp[0] > temp[1]) 
                sort(temp.begin(), temp.end());
            
            ans = max(ans, temp[temp.size() - 1]);
        
        
        return ans;
    
;

AutoX-2. 蚂蚁王国的蜂蜜 

 

这题注意每一次运算的时候都要把数据类型转换成double!!! 否则两个int相除的结果和double是不一样的。

剩下的我们用一个动态数组temp模拟每次操作即可。

class Solution 
public:
    vector<double> honeyQuotes(vector<vector<int>>& handle) 
        vector<double> ans;
        vector<int> temp;
        for (int i = 0; i < handle.size(); i++) 
            if (handle[i][0] == 1) 
                temp.push_back(handle[i][1]);
             else if (handle[i][0] == 2) 
                for (int j = 0; j < temp.size(); j++) 
                    if (temp[j] == handle[i][1]) 
                        temp.erase(temp.begin() + j);
                        break;
                    
                
             else if (handle[i][0] == 3) 
                if (temp.size() == 0) 
                    ans.push_back(-1.0);
                 else 
                    double ave = accumulate(temp.begin(), temp.end(), 0) / (double)temp.size();
                    ans.push_back(ave);   
                
             else if (handle[i][0] == 4) 
                if (temp.size() == 0) 
                    ans.push_back(-1.0);
                 else 
                    double ave = (accumulate(temp.begin(), temp.end(), 0) / (double)temp.size());
                    // cout << ave << " ";
                    double x = 0.0;
                    for (auto elem : temp) 
                        x += (((double)elem - ave) * ((double)elem - ave));
                    
                    ans.push_back(x/(double)temp.size());
                
            
        
        return ans;
    
;

动态规划:AutoX-3. 出行的最少购票费用

  转换成天数大于day条件下的最小票价问题,可以参考打家劫舍II的思路。

class Solution 
public:
    long long minCostToTravelOnDays(vector<int>& days, vector<vector<int>>& tickets) 
        int m = tickets.size();
        vector<int> pts(m);
        int n = days.size();
        vector<long long> dp(n + 1, LLONG_MAX);
        dp[0] = 0;
        for (int i = 1; i <= n; ++i) 
            for (int j = 0; j < m; ++j) 
                while (days[i - 1] - days[pts[j]] >= tickets[j][0])
                    pts[j]++;
                dp[i] = min(dp[i], dp[pts[j]] + tickets[j][1]);
            
        
        return dp[n];
    
;

AutoX-4. 蚂蚁爬行

 由于发现比赛的时候只剩几十分钟了,这题没时间搞,下次有空再看看吧!

继续加油!!!

以上是关于LeetCode AutoX 安途智行专场竞赛题解的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode地平线专场——第308场周赛题解

2017中国大学生程序设计竞赛 - 女生专场(重现)

2017中国大学生程序设计竞赛 - 女生专场(dp)

"巴卡斯杯" 中国大学生程序设计竞赛 - 女生专场(重现)解题思路

"巴卡斯杯" 中国大学生程序设计竞赛 - 女生专场(重现)解题思路

2017中国大学生程序设计竞赛 - 女生专场 1002 dp