褶子了(统计每个数字出现的次数,利用下标映射数组值和负数-1,-2,...统计次数)

一道关于统计数组中数字出现次数的问题,要求空间复杂度为O(1),时间复杂度为O(N)。通过建立映射,使用负数表示重复次数,实现快速统计。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

刚刚做了一道题,其实还蛮简单的,但是要在很短时间内做好,就要注意每道题的分配时间。还有就是要在做之前想清楚怎么做

  1. 数组中的数字1~n,统计重复数字和重复的次数,用O(1)的空间复杂度,O(N)的时间复杂度。
  2. 计算能组成能组成的矩形最大面积。其实挺简单的,没时间了。。。

Q1. 数组的值在1~N之间,index在0~N-1之间,一个萝卜一个坑,若数组无重复说明数组值num必对应index=num-1;现在来理清思路:

  • 做映射,将下标值i-1 用于与 数值i 一一对应,
    • 利用负数-1,-2,...表示数值i在数组中出现的次数,记录在下标为i-1的数组中
  • tmp=nums[i]-1
  • ①若nums[i]<=0 ,说明nums[i]的值已经参与过计数,i往后面循环
    • i+1
  • ②若nums[tmp]>0,说明nums[tmp]当下的值没有参与过计数,将改之赋给正在参与计数的nums[i](以备下次计数),同时,已将原来tmp=nums[i]-1映射到下标tmp,开始计数为-1
    • nums[i]=nums[tmp]
    • nums[tmp]=-1
  • else<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值