LeetCode 406. Queue Reconstruction by Height
根据题意,输入的类型是int[][],其中int[i][0]表示第i个元素的高度,int[i][1]表示第i个元素前面大于等于这个元素高度的元素的个数。
LeetCode 406. Queue Reconstruction by Height
根据题意,输入的类型是int[][],其中int[i][0]表示第i个元素的高度,int[i][1]表示第i个元素前面大于等于这个元素高度的元素的个数。
如题所述,需要调整数组使得数组满足题述条件。直观地考虑,可以遍历一次数组,发现当前元素和下一元素不满足题述关系时,交换他们。
代码如下。
看到题目的第一反应是,这不就是最小堆吗?但是仔细看题,题目要求的四个操作都是在常数时间完成的,最小堆无法达到这样的性能。而且,题目要求的是能够入栈、出栈、看栈顶和看最小值,并没有要求弹出最小值。事实上,如果要每次都弹出最小值,那就只能是最小堆了。
仔细分析,考虑一种基本解法。建立两个栈,一个栈作为常规栈,实现常规的入栈出栈。另一个栈作为最小值栈,存储记录当某次入栈出栈导致最小值变化时,新的最小值。
一个字符串$a$是另一个字符串$b$的anagram,需要满足以下两个条件:
$a$和$b$包含相同的字母表$\Sigma$。
对于每一个$c\in \Sigma$,$a$和$b$中包含有相同个数的$c$。
如题所述,对于判断一个数$n$是否是任意一个质数$a$的指数的问题,我们都可以用以下方法来求。
找到整数范围内能表示的最大的这个质数的指数$max$。
用$max$对$n$取模,如果模为0则结果为真,否则结果为假。
代码如下。
如题所述,要在用数组表示的数值上加1,其中数组里每个位置上的数值表示十进制的一位。这里存在一个问题:这个数字是大端表示还是小端表示?根据测试用例我们可以看到是大端表示。
LeetCode 387. First Unique Character in a String
按照题意,我们考虑一种直观的解法。
设置一个大小为26的int数组charCount,用来记录每个字符出现的次数。
第一次遍历字符串,对于每一个字符c,将charCount[c - 'a']自增1。
第二次遍历字符串,对于每一个下标i,如果该位置的字符对应的计数值为1,我们知道在整个字符串中这个字符只出现了一次,范围这个下标i即可。