7.22-Contest 42-小結(jié)

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á)到的字符串作為替換。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容