这道题的正解是 单调栈,但是我们用朴素解法 对每个位置向右暴力扫描 也能在考试时拿到一定的分数。
题意:先把每个数 arr[i] 按十六进制各位数字之和算出「权重」,再对每个位置求右侧第一个权重严格更大的元素下标;若不存在则输出 −1。
权重计算:反复取最低四位 n&15 累加,再右移四位,直到数为 0。
朴素做法:对每个下标 i,从 i+1 向右扫描,找到第一个权重更大的位置。时间 O(n2)。
设计一个程序来处理特定的数组分析问题。
给定一个非负整数数组arr,其中每个整数用其十六进制表示中的数字之和来表示其“权重”(权重计算是基于十六进制表示中每位数字的和,0 ~ 9代表权重0~ 9,权重A:10、B:11、C:12、D:13、E:14、F:15)。
您的任务是找出数组中每个元素右侧第一个具有更大“权重”的元素,并返回一个新的数组,该数组包含这些元素的索引。
如果一个元素的右侧没有更大“权重”的元素,则对应位置返回 −1。
开通会员即可查看完整视频题解: 1.题目讲解 2.思路分析 3.逐行代码手写
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.