7.22-Contest 42-小结

2017-07-23  本文已影响0人  Get_it

645. Set Mismatch

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 算法。首先根据每个pair的第二个数的大小对所有pair进行排序。然后依次取第二个数最小的pair,如何当前的pair的第一个数比前一个pair的第二个数小则跳过。

647. Palindromic Substrings

这道题与在字符串中找最长的回文字符串解法相同,使用 dynamic programming 不断判断对应字符串是否是回文,同时进行统计即可。

648. Replace Words

这道题首先根据dict建立一个 multiway trie,然后依次对 sentence 中的 word 在 trie 中查找,取最先达到的字符串作为替换。

上一篇 下一篇

猜你喜欢

热点阅读