LeetCode AutoX 安途智行专场竞赛题解
发布日期:2025-04-05 00:44:31 浏览次数:10 分类:精选文章

本文共 3193 字,大约阅读时间需要 10 分钟。

技术分享:各类算法问题解析与优化实践

作为一个技术爱好者,我常常在课余时间探索和解答各类编程问题,希望通过分享这些思考过程,能够为更多的开发者提供Reference。


AutoX-1:网页瀑布流优化

瀑布流是一种高效的网页排版算法,主要思想是将内容逐渐填充,最小的空白处优先填充节省时间。代码实现思路如下:

int getLengthOfWaterfallFlow(int num, vector
&block) { if (num >= block.size()) { // 当填充次数超过元素个数 sort(block.begin(), block.end()); return block[block.size() - 1]; } vector
temp(block.begin(), block.begin() + num); sort(temp.begin(), temp.end()); int ans = temp[0]; // 逐步填充每个元素 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.back()); } return ans;}

核心逻辑是逐步填充最小空白处,并每次更新最大值,实现减少布局计算量的目标。


AutoX-2:蚂蚁王国的蜂蜜分配问题

这个问题需要对大量数据进行动态处理,确保正确性在于将每个操作转换为double类型,这样才能避免整数除法引起的精度问题。

代码实现重点在于:

vector
honeyQuotes(vector
> &handle) { vector
ans; vector
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) { // 消除重复数据操作 temp.erase(remove_if(temp.begin(), temp.end(), [](double x) { return x == handle[i][1]; }), temp.end()); } else if (handle[i][0] == 3) { // 均值计算 if (temp.empty()) { ans.push_back(-1.0); } else { double sum = accumulate(temp.begin(), temp.end(), 0.0); ans.push_back(sum / temp.size()); } } else if (handle[i][0] == 4) { // 方差统计 if (temp.empty()) { ans.push_back(-1.0); } else { double sum = accumulate(temp.begin(), temp.end(), 0.0); double variance = 0.0; for (double x : temp) { variance += (x - sum / temp.size()) * (x - sum / temp.size()); } ans.push_back(variance / temp.size()); } } } return ans;}

AutoX-3:出行最少购票费用

这个问题可参考打家劫舍II的动态规划解决方案。核心思路是分区间处理,预处理天数包含的购票天数。

代码实现如下:

long long minCostToTravelOnDays(vector
&days, vector
> &tickets) { int m = tickets.size(); vector
pts(m); int n = days.size(); vector
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];}

实现中需要注意分段处理和优化查询点数组pts,提升查询效率。


AutoX-4:蚂蚁爬行

这题广受欢迎,但本次仓促,建议后续深究。以下是暴力解法思路:

int ant Climbing Brake() {    vector
data; // 数据预处理... vector
dp(data.size(), 1); for (int i = 1; i < data.size(); ++i) { if (data[i] < data[i - 1]) { dp[i] = dp[i - 2] + data[i]; } else { dp[i] = dp[i - 1] + data[i] - min(data[i] - data[i - 1], data[i] - data[i - 2]); } } return dp.back();}

深入思考还可以优化时间复杂度但需更多思考。


如需进一步探讨或有其他问题欢迎在线交流。或许能与你分享一些code优化的小技巧哦!

上一篇:LeetCode Best Time to Buy and Sell Stock with Cooldown
下一篇:LeetCode Add Two Numbers

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2025年04月21日 07时18分05秒