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. 蚂蚁爬行

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

继续加油!!!

猜你喜欢

转载自blog.csdn.net/qq_41895747/article/details/126572164