1. 程式人生 > >LeetCode-11-6

LeetCode-11-6

swe argument cif tar true sam word oid []

1. Two Sum

Given an array of integers, return indices of the two numbers such that they add up to a specific target.

You may assume that each input would have exactly one solution, and you may not use the same element twice.

Example:

Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].
1. 用兩個循環
class Solution {
    public int[] twoSum(int[] nums, int target) {
        int [] res = new int [2];
        for(int i = 0 ; i < nums.length ; i++) {
            for(int j = 0 ; j < nums.length ; j++) {
                if(i != j && target == nums[i] + nums[j]) {
                    res[
0] = i; res[1] = j; } } } return res; } }
2. 用Map

2. Two Sum II - Input array is sorted

Given an array of integers that is already sorted in ascending order, find two numbers such that they add up to a specific target number.

The function twoSum should return indices of the two numbers such that they add up to the target, where index1 must be less than index2. Please note that your returned answers (both index1 and index2) are not zero-based.

You may assume that each input would have exactly one solution and you may not use the same element twice.

Input: numbers={2, 7, 11, 15}, target=9
Output: index1=1, index2=2

class Solution {
    public int[] twoSum(int[] numbers, int target) {
        Map<Integer,Integer> map  = new HashMap<>();
        for(int i = 0 ; i < numbers.length ; i++) {
            int tmp = target - numbers[i];
            if(map.containsKey(tmp)) {
                return new int []{map.get(tmp),i+1};
            }
            map.put(numbers[i],i+1);
        }
        throw new IllegalArgumentException("No two sum solution");
    }
}

3. Two Sum IV - Input is a BST

Given a Binary Search Tree and a target number, return true if there exist two elements in the BST such that their sum is equal to the given target.

Example 1:

Input: 
    5
   /   3   6
 / \   2   4   7

Target = 9

Output: True
class Solution {
    public boolean findTarget(TreeNode root, int k) {
        Set<Integer> set = new HashSet<>();
        return find(root,k,set);
    }
    
    public boolean find(TreeNode root, int k , Set<Integer> set) {
        if(root == null) return false;
        if(set.contains(k - root.val)) {
            return true;
        }
        set.add(root.val);
        return find(root.left,k,set) || find(root.right,k,set);
    }
}

4. Rotate Array

Rotate an array of n elements to the right by k steps.

For example, with n = 7 and k = 3, the array [1,2,3,4,5,6,7] is rotated to [5,6,7,1,2,3,4].

聲明一個長度為原數組兩倍的數組,然後拼接

class Solution {
    public void rotate(int[] nums, int k) {
        int [] tmp = new int[nums.length * 2];
        for(int i = 0 ; i < nums.length ; i++) {
            tmp[i] = tmp[i + nums.length] = nums[i];
        }
        if(nums.length < k) {
            k = k % nums.length;
        }
        for(int i = 0 ; i < nums.length; i++) {
            nums[i] = tmp[i + nums.length - k];
        }
    }
}

5. Word Pattern

Given a pattern and a string str, find if str follows the same pattern.

Here follow means a full match, such that there is a bijection between a letter in pattern and a non-empty word in str.

Examples:

  1. pattern = "abba", str = "dog cat cat dog" should return true.
  2. pattern = "abba", str = "dog cat cat fish" should return false.
  3. pattern = "aaaa", str = "dog cat cat dog" should return false.
  4. pattern = "abba", str = "dog dog dog dog" should return false.
    class Solution {
        public boolean wordPattern(String pattern, String str) {
            Map<Character,String> map = new HashMap<>();
            String [] strings = str.split(" ");
            if(pattern.length() != strings.length) {
                return false;
            }
            String tmp = "";
            for(int i = 0 ; i < pattern.length();i++) {
                if(map.containsKey(pattern.charAt(i))) {
                    if(!map.get(pattern.charAt(i)).equals(strings[i])) {
                        return false;
                    }
                }else if(tmp.equals(strings[i])){
                    //確定他不是所有的value都一樣的情況,比如dog dog dog dog和abba
                    return false;
                } else{
                    map.put(pattern.charAt(i),strings[i]);
                    tmp = strings[i];
                }
            }
            return true;
        }
    }

6. Isomorphic Strings

Given two strings s and t, determine if they are isomorphic.

Two strings are isomorphic if the characters in s can be replaced to get t.

All occurrences of a character must be replaced with another character while preserving the order of characters. No two characters may map to the same character but a character may map to itself.

For example,
Given "egg", "add", return true.

Given "foo", "bar", return false.

Given "paper", "title", return true.

跟上面那個題一樣的啊

class Solution {
    public boolean isIsomorphic(String s, String t) {
        Map<Character,Character> map = new HashMap<>();
        if(s.length() != t.length()) {
            return false;
        }
        Character tmp = ‘1‘;
        for(int i =0 ; i < s.length();i++) {
            if(map.containsKey(s.charAt(i))) {
                if(!map.get(s.charAt(i)).equals(t.charAt(i))) {
                    return false;
                }
            }else if(tmp == t.charAt(i)) {
                return false;
            }else{
                map.put(s.charAt(i),t.charAt(i));
                tmp = t.charAt(i);
            }
        }
        return true;
    }
}

LeetCode-11-6