刚刚做了一道题,其实还蛮简单的,但是要在很短时间内做好,就要注意每道题的分配时间。还有就是要在做之前想清楚怎么做。
- 数组中的数字1~n,统计重复数字和重复的次数,用O(1)的空间复杂度,O(N)的时间复杂度。
- 计算能组成能组成的矩形最大面积。其实挺简单的,没时间了。。。
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<