Leecode402:移掉 K 位数字

这道题一看想的是可能用回溯或者什么别的方法,但是那样的话时间复杂度非常高,而且也不适用于动态规划,所以观察的话,可以知道从前往后判断的话肯定是前面越小越好,所以只需要前面最小,整体就最小。因此从前往后进行判断,如果后面的比前面的小,那么就删除前一位(之所以是前一位是因为在从前往后的过程中前一位一定是前面序列里最大的),然后不断后移,只要移动的位数等于了k那么就说明已经找到了最小。

下面存在的问题是,在LinkedList中,判断是否为空的方法是使用isEmpty()函数,而不是不等于null!!对于StringBuilder才是length()!还有i++是不对的,因为当前如果是最小那么就要用这个一直比较下去,而不是在小循环中就往后移动!

Leecode402:移掉 K 位数字_第1张图片

 

下面一看就知道是因为呈不严格递增的序列,导致count一直没有计数,所以需要将递增的情况考虑进去(将结尾的几个数移除,因为结尾的数比较大)

Leecode402:移掉 K 位数字_第2张图片 

 正确解答:

 Leecode402:移掉 K 位数字_第3张图片

 

你可能感兴趣的:(刷题日记,leetcode)