132 Pattern

http://www.lintcode.com/zh-cn/problem/132-pattern/?rand=true

import java.util.Collections;
import java.util.LinkedList;

public class Solution {
    /*
     * @param nums: a list of n integers
     * @return: true if there is a 132 pattern or false
     */
    public boolean find132pattern(int[] nums) {
        // write your code here
        if (nums.length < 3) {
            return false;
        }
        LinkedList list = new LinkedList<>();
//        前两个第一次比较就需要使用,不需要添加,其它全部加到list里边
        for (int i = 2; i < nums.length; i++) {
            list.add(nums[i]);
        }
//        对list进行排序
        Collections.sort(list);
        int min = nums[0];
//        min记录前边的最小值
        for (int i = 1; i < nums.length - 1; i++) {
//            i表示当前值,我们需要找到一个i,它处于3的位置
            if (nums[i] > min) {
//                13已经就位,去找2
                for (Integer temp : list) {
//                    因为list是升序,所以如果temp已经大于3了,后边肯定也不行,直接返回
                    if (temp >= nums[i]) {
                        break;
                    }
//                    找到返回true
                    if (temp > min) {
                        return true;
                    }
                }
            }
//            这次循环结束,把下一个元素提前移除,然后重置最小值。
            list.remove(new Integer(nums[i + 1]));
            min = Math.min(min, nums[i]);
        }
        return false;
    }
}

你可能感兴趣的:(132 Pattern)