LeetCode-Easy

1.Valid Parentheses

Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.

An input string is valid if:
Open brackets must be closed by the same type of brackets.
Open brackets must be closed in the correct order.
Note that an empty string is also considered valid.

Input: "()"
Output: true
Input: "([)]"
Output: false
Input: "{[]}"
Output: true
复制代码
class Solution {
    public boolean isValid(String s) {
        if(s==null || s.length()%2!=0){
            return false;
        }
        String r = "";
        for(int i=0;i<s.length();i++){
            char curr = s.charAt(i);
            //检查当前位置字符是 括号的开头还是结尾
            if(curr == ')' || curr == ']' || curr == '}'){
                //如果当前位置字符是 括号的结尾
                //检查拼接的字符串的上一个字符是否可对应消除
                if(r == ""){
                    //如果拼接的字符串为空:错
                    return false;
                }else if(curr == ')'&&r.charAt(r.length()-1)=='('){
                    r = r.substring(0,r.length()-1);
                }else if(curr == ']'&&r.charAt(r.length()-1)=='['){
                    r = r.substring(0,r.length()-1);
                }else if(curr == '}'&&r.charAt(r.length()-1)=='{'){
                    r = r.substring(0,r.length()-1);
                }else{
                    //如果拼接的字符串的上一个字符不可对应消除:错
                    return false;
                }
            }else{
                //如果当前位置 是括号的开头
                //无法消除,则继续拼接字符串
                r += curr;
            }
        }
        //最后检查拼接的字符串长度,长度!=0,说明有括号未对应消除掉:错
        return r.length()==0;
    }
}
复制代码

2.N-Repeated Element in Size 2N Array

In a array A of size 2N, there are N+1 unique elements, and exactly one of these elements is repeated N times.
Return the element repeated N times.

Input: [1,2,3,3]
Output: 3
Input: [2,1,2,5,3,2]
Output: 2
复制代码
思路:
1:
既然有1个数字占据了数组的1/2,我们将数组进行分割,2个元素1组,极端情况下用于看不到重复元素.
但是如果3个元素一组, 即使是极端情况,我们也可以在某一组3个元素中检查到重复对象,
如果检查不到,分组剩下的元素就一定是目标值.
2:
当然可以利用现成的API,使用Set.add每个元素,通过返回的boolean值来判断是否取到重复元素.
class Solution {
    public int repeatedNTimes(int[] A) {
        int count = A.length/3;
        for(int i=0;i<count;i++){
            if(A[i*3] == A[i*3 + 1] || A[i*3] == A[i*3 + 2]) return A[i*3];
            if(A[i*3 + 1] == A[i*3 + 2]) return A[i*3 + 1];
        }
        return A[3*count];
    }
}
复制代码

猜你喜欢

转载自juejin.im/post/5c26175df265da613f2f8cb4