leetcode (Find Smallest Letter Greater Than Target)
阿新 • • 發佈:2019-01-10
Title:Find Smallest Letter Greater Than Target 744
Difficulty:Easy
原題leetcode地址: https://leetcode.com/problems/find-smallest-letter-greater-than-target/
1. 見程式碼註釋
時間複雜度:O(n),一層while迴圈。
空間複雜度:O(n),申請長度為26的陣列。
/** * 採用陣列將letter出現的字母標記為1,在迴圈中對target做加加操作,只要找到某處存的是1,就找到對應的數,注意z的位置 * @param letters * @param target * @return */ public static char nextGreatestLetter(char[] letters, char target) { int tmp[] = new int[26]; for (int i = 0; i < letters.length; i++) { tmp[letters[i] - 'a'] = 1; } while (true) { target++; if (target > 'z') { return letters[0]; } if (tmp[target - 'a'] == 1) { return target; } } }
1. 二分法
時間複雜度:O(logn),一層while迴圈。
空間複雜度:O(1),沒有申請額外空間。
/** * 二分法 * @param letters * @param target * @return */ public static char nextGreatestLetter2(char[] letters, char target) { int low = 0; int high = letters.length; while (low < high) { int mid = low + (high - low) / 2; if (letters[mid] <= target) { low = mid + 1; } else { high = mid; } } return letters[low % letters.length]; }