leetcode周赛-3379. 转换数组

给你一个整数数组 nums,它表示一个循环数组。请你遵循以下规则创建一个大小 相同 的新数组 result
对于每个下标 i(其中 0 <= i < nums.length),独立执行以下操作:

  • 如果 nums[i] > 0:从下标 i 开始,向 移动 nums[i] 步,在循环数组中落脚的下标对应的值赋给 result[i]
  • 如果 nums[i] < 0:从下标 i 开始,向 移动 abs(nums[i]) 步,在循环数组中落脚的下标对应的值赋给 result[i]
  • 如果 nums[i] == 0:将 nums[i] 的值赋给 result[i]

返回新数组 result

注意: 由于 nums 是循环数组,向右移动超过最后一个元素时将回到开头,向左移动超过第一个元素时将回到末尾。

cpp 复制代码
class Solution {
public:
    vector<int> constructTransformedArray(vector<int>& nums) {
        int n=nums.size();
        vector<int> result(n,0);
        for(int i=0;i<n;i++){
            result[i]=nums[(i+(nums[i]%n+n))%n];
        }
        return result;
    }
};

我是fw,区分正负、处理溢出,花了很长时间,经过复盘才发现,当numsi为负数的时候,比如是-k,那么需要左移k步,那么其实就相当于右移动n-k步。

正数:resulti=nums(i+(nums\[i%n))%n];-------->推广到:resulti=nums(i+(nums\[i%n+n))%n];

相关推荐
SiliconGazer6 分钟前
第15届国赛满分代码解析(下)—— 运动轨迹算法、按键交互与完整状态机
算法·状态机·stc15f2k60s2·浮点运算·蓝桥杯国赛·运动轨迹、·向量分解
Navigator_Z6 分钟前
LeetCode //C - 1096. Brace Expansion II
c语言·算法·leetcode
luj_17688 分钟前
FreeDOS vs MS-DOS PC-DOS 对比解析
服务器·c语言·开发语言·经验分享·算法
RH23121118 分钟前
2026.6.10 数据结构 二叉树
数据结构
笨笨没好名字22 分钟前
Leetcode刷题python版第一周
python·算法·leetcode
Cthy_hy27 分钟前
斯特林数:组合划分的递归经典,一二两类全解
python·算法·斯特林数
不忘不弃35 分钟前
计算pi的近似值
算法
码云骑士35 分钟前
12-GIL不是性能杀手(下)-绕过GIL的三种方案与决策树
算法·决策树·机器学习
一只齐刘海的猫38 分钟前
【Leetcode】无重复字符的最长子串
算法·leetcode·职场和发展
行智科技40 分钟前
FAST-LIVO2 源码精读(二):环境搭建与编译避坑
算法·ubuntu·自动驾驶·slam