• 132-pattern(蛮难的)


    https://leetcode.com/problems/132-pattern/

    下面是我的做法。后来又看了一个提示: 

    https://discuss.leetcode.com/topic/67881/single-pass-c-o-n-space-and-time-solution-8-lines-with-detailed-explanation

    里面的解法非常好。先从后向前找到中间那个数。利用了栈的特性,非常好。

    package com.company;
    
    
    import java.util.*;
    
    class Solution {
        public boolean find132pattern(int[] nums) {
            List<Integer> start = new ArrayList();
            List<Integer> end = new ArrayList();
    
            int small = Integer.MAX_VALUE;
            int big = Integer.MIN_VALUE;
    
            for (int i=1; i<nums.length; i++) {
                if (nums[i] == nums[i-1]) {
                    continue;
                }
                if (nums[i] > nums[i-1]) {
                    if (nums[i] > big) {
                        big = nums[i];
                    }
                    if (nums[i-1] < small) {
                        small = nums[i-1];
                    }
                    for (int k=0; k<start.size(); k++) {
                        if (nums[i] > start.get(k) && nums[i] < end.get(k)) {
                            return true;
                        }
                    }
                }
                else {
                    if (nums[i] > small) {
                        return true;
                    }
                    for (int k=0; k<start.size(); k++) {
                        if (nums[i] > start.get(k) && nums[i] < end.get(k)) {
                            return true;
                        }
                    }
                    if (big > Integer.MIN_VALUE) {
                        start.add(small);
                        end.add(big);
                        //System.out.printf("start: %d, end: %d
    ", small, big);
                        small = Integer.MAX_VALUE;
                        big = Integer.MIN_VALUE;
                    }
    
                }
            }
            return false;
        }
    }
    
    public class Main {
    
        public static void main(String[] args) throws InterruptedException {
    
            System.out.println("Hello!");
            Solution solution = new Solution();
    
            // Your Codec object will be instantiated and called as such:
            int[] g = {3, 5, 0, 3, 4};
            boolean ret = solution.find132pattern(g);
            System.out.printf("ret:%b
    ", ret);
    
            System.out.println();
    
        }
    
    }
  • 相关阅读:
    随笔
    我的舅舅
    代码规范
    SpringMVC_乱码问题
    SpringMVC_接受请求及数据回显
    Restful风格
    第六周总结
    SpringMVC_控制器
    SpringMVC_初次使用
    SpringMVC_简介
  • 原文地址:https://www.cnblogs.com/charlesblc/p/6075841.html
Copyright © 2020-2023  润新知