From 0fc0c4df8bb32db690df0b6f0c06bc340273ac3f Mon Sep 17 00:00:00 2001 From: CyC2018 <1029579233@qq.com> Date: Mon, 12 Mar 2018 10:06:32 +0800 Subject: [PATCH] auto commit --- notes/剑指 offer 题解.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/notes/剑指 offer 题解.md b/notes/剑指 offer 题解.md index 13ea8bc6..c2cda052 100644 --- a/notes/剑指 offer 题解.md +++ b/notes/剑指 offer 题解.md @@ -1822,6 +1822,10 @@ public ArrayList> FindContinuousSequence(int sum) { 输出:"student. a am I" +**解题思路** + +题目应该有一个隐含条件,就是不能用额外的空间。虽然 Java 的题目输入参数为 String 类型,需要先创建一个字符数组使得空间复杂度为 O(n),但是正确的参数类型应该和原书一样,为字符数组,并且只能使用该字符数组的空间。任何使用了额外空间的解法在面试时都会大打折扣,包括递归解法。正确的解法应该是和书上一样,先旋转每个单词,再旋转整个字符串。 + ```java public String ReverseSentence(String str) { if (str.length() == 0) return str; @@ -1887,6 +1891,7 @@ private void reverse(char[] c, int i, int j) { public ArrayList maxInWindows(int[] num, int size) { ArrayList ret = new ArrayList<>(); if (size > num.length || size < 1) return ret; + // 构建最大堆,即堆顶元素是堆的最大值。 PriorityQueue heap = new PriorityQueue((o1, o2) -> o2 - o1); for (int i = 0; i < size; i++) heap.add(num[i]); ret.add(heap.peek());