645. Set Mismatch
- 這道題只需確保 i 位置上的數(shù)滿足 nums[i]==i+1,通過不斷換位置即可。
- time complexity: O(n), space complexity: O(1)
- 代碼如下:
public class SetMismatch {
public int[] findErrorNums(int[] nums) {
// swap and find trick
int[] res = new int[2];
// find duplicates
for (int i = 0; i < nums.length; i++) {
while (nums[i] != i + 1) {
int left = nums[i];
int right = nums[nums[i] - 1];
swap(nums, i, nums[i] - 1);
if (left == right) {
res[0] = left;
break;
}
}
}
// find missing
for (int i = 0; i < nums.length; i++) {
if (nums[i] != i + 1) {
res[1] = i + 1;
break;
}
}
return res;
}
private void swap(int[] nums, int i, int j) {
int tmp = nums[i];
nums[i] = nums[j];
nums[j] = tmp;
}
}
646. Maximum Length of Pair Chain
這道題跟 meeting room 的解法類似,使用 greedy 算法。首先根據(jù)每個(gè)pair的第二個(gè)數(shù)的大小對(duì)所有pair進(jìn)行排序。然后依次取第二個(gè)數(shù)最小的pair,如何當(dāng)前的pair的第一個(gè)數(shù)比前一個(gè)pair的第二個(gè)數(shù)小則跳過。
647. Palindromic Substrings
這道題與在字符串中找最長(zhǎng)的回文字符串解法相同,使用 dynamic programming 不斷判斷對(duì)應(yīng)字符串是否是回文,同時(shí)進(jìn)行統(tǒng)計(jì)即可。
648. Replace Words
這道題首先根據(jù)dict建立一個(gè) multiway trie,然后依次對(duì) sentence 中的 word 在 trie 中查找,取最先達(dá)到的字符串作為替換。