行业知识
【独家OD2023C卷真题】20天拿下华为OD笔试【单调栈】2023C-回转寿司【欧弟算法】全网注释最详细分类最全的华为OD真题题解
2026-11-05 01:18:09
来源:互联网转载
文章目录
- 题目描述与示例
- 题目描述
- 输入描述
- 输出描述
- 示例一
- 输入
- 输出
- 示例二
- 输入
- 输出
- 解题思路
- 代码
- 解法一:正序遍历写法
- python
- java
- cpp
- 解法二:逆序遍历写法
- python
- java
- cpp
- 时空复杂度
- 华为OD���法/大厂面试高频题算法练习冲刺训练
题目描述与示例
题目描述
寿司店周年庆,正在举办优惠活动回馈新老客户寿司转盘上总共有n盘寿司,prices[i] 是第 i 盘寿司的价格,如果客户选择了第 i盘寿司,寿司店免费赠送客户距离第 i 盘寿司最近的下一盘寿司 j,前提是prices[j]
()输入描述
输入的每一个数字代表每盘寿司的价格,每盘寿司的价格之间使用空格分隔 寿司的盘数 n范围为: 1 public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String[] input = scanner.nextLine().split(" "); int n = input.length; int[] nums = new int[n]; for (int i = 0; i
cpp
#include #include #include #include using namespace std;int main() { string input; getline(cin, input); stringstream ss(input); vector nums; int num; while (ss >> num) { nums.push_back(num); } int n = nums.size(); stack st; vector ans(nums.begin(), nums.end()); for (int i = 0; i num) { int topIdx = st.top(); st.pop(); ans[topIdx] = num + nums[topIdx]; } st.push(idx); } for (int i = 0; icpp
#include #include #include #include using namespace std;int main() { string input; getline(cin, input); stringstream ss(input); vector nums; int num; while (ss >> num) { nums.push_back(num); } int n = nums.size(); stack stk; vector ans = nums; for (int i = 2 * n - 1; i >= 0; --i) { int idx = i % n; int num = nums[idx]; while (!stk.empty() && nums[stk.top()] >= num) { stk.pop(); } if (!stk.empty()) { ans[idx] = nums[stk.top()] + nums[idx]; } stk.push(idx); } for (int i = 0; i