(资料图片仅供参考)
【遍历】O(n^2)遍历,循环x//=10取第一个数,nums[j]%10取最后一个数。
【优化遍历】O(10n)遍历,遍历nums的同时存前面数字的第一个数出现的次数,遍历的时候判断当前数字最后一个数与前面的数互质直接加上该数出现的次数。
得到整数零需要执行的最少操作数
【枚举】假设每次操作只会减去2^i,设恰好执行k次操作,num1 - k num2 - k 2^i = 0,num1 - k 2^i = k 2^i,设x = num1 - num2 * k,可以看出,k的合法范围是[x.bit_count(), x],至少需要bit_count个2^i,至多用x个2^i,而区间内所有值都能取到,因为每个2^i都能拆成两个2^(i-1)。
将数组划分成若干好子数组的方式
【乘法原理】考虑在哪插入子数组的分割边界,因为每个子数组都恰好包含一个1,所以前后两个1之间必须恰好插入一个子数组的边界,每两个1之间有x个0就有x+1种边界方案,根据乘法原理,答案是所有边界方案的乘积,即每两个1的下标差的乘积。用pre存上一个1的下标,当遇到1时更新答案。
机器人碰撞
【栈模拟】用列表left维护相左的机器人,用栈st维护向右的机器人,按照题意模拟,代码实现时直接在healths上修改。
关键词: