LeetCode-11-6

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;
    }
}
原文地址:https://www.cnblogs.com/qjx-2016/p/7792609.html