规范格式

This commit is contained in:
YDZ
2020-08-07 15:50:06 +08:00
parent 854a339abc
commit 4e11f4028a
1438 changed files with 907 additions and 924 deletions

View File

@ -0,0 +1,49 @@
package leetcode
import (
"fmt"
"math"
)
// 解法一 单调栈
func find132pattern(nums []int) bool {
if len(nums) < 3 {
return false
}
num3, stack := math.MinInt64, []int{}
for i := len(nums) - 1; i >= 0; i-- {
if nums[i] < num3 {
return true
}
for len(stack) != 0 && nums[i] > stack[len(stack)-1] {
num3 = stack[len(stack)-1]
stack = stack[:len(stack)-1]
}
stack = append(stack, nums[i])
fmt.Printf("stack = %v \n", stack)
}
return false
}
// 解法二 暴力解法,超时!
func find132pattern1(nums []int) bool {
if len(nums) < 3 {
return false
}
for j := 0; j < len(nums); j++ {
stack := []int{}
for i := j; i < len(nums); i++ {
if len(stack) == 0 || (len(stack) > 0 && nums[i] > nums[stack[len(stack)-1]]) {
stack = append(stack, i)
} else if nums[i] < nums[stack[len(stack)-1]] {
index := len(stack) - 1
for ; index >= 0; index-- {
if nums[stack[index]] < nums[i] {
return true
}
}
}
}
}
return false
}

View File

@ -0,0 +1,63 @@
package leetcode
import (
"fmt"
"testing"
)
type question456 struct {
para456
ans456
}
// para 是参数
// one 代表第一个参数
type para456 struct {
one []int
}
// ans 是答案
// one 代表第一个答案
type ans456 struct {
one bool
}
func Test_Problem456(t *testing.T) {
qs := []question456{
question456{
para456{[]int{}},
ans456{false},
},
question456{
para456{[]int{1, 2, 3, 4}},
ans456{false},
},
question456{
para456{[]int{3, 1, 4, 2}},
ans456{true},
},
question456{
para456{[]int{-1, 3, 2, 0}},
ans456{true},
},
question456{
para456{[]int{3, 5, 0, 3, 4}},
ans456{true},
},
// 如需多个测试,可以复制上方元素。
}
fmt.Printf("------------------------Leetcode Problem 456------------------------\n")
for _, q := range qs {
_, p := q.ans456, q.para456
fmt.Printf("【input】:%v 【output】:%v\n", p, find132pattern(p.one))
}
fmt.Printf("\n\n\n")
}

View File

@ -0,0 +1,46 @@
# [456. 132 Pattern](https://leetcode.com/problems/132-pattern/)
## 题目
Given a sequence of n integers a1, a2, ..., an, a 132 pattern is a subsequence a**i**, a**j**, a**k** such that **i** < **j** < **k** and a**i** < a**k** < a**j**. Design an algorithm that takes a list of n numbers as input and checks whether there is a 132 pattern in the list.
**Note:** n will be less than 15,000.
**Example 1:**
Input: [1, 2, 3, 4]
Output: False
Explanation: There is no 132 pattern in the sequence.
**Example 2:**
Input: [3, 1, 4, 2]
Output: True
Explanation: There is a 132 pattern in the sequence: [1, 4, 2].
**Example 3:**
Input: [-1, 3, 2, 0]
Output: True
Explanation: There are three 132 patterns in the sequence: [-1, 3, 2], [-1, 3, 0] and [-1, 2, 0].
## 题目大意
给定一个整数序列a1, a2, ..., an一个 132 模式的子序列 ai, aj, ak 被定义为 i < j < k ai < ak < aj设计一个算法当给定有 n 个数字的序列时验证这个序列中是否含有 132 模式的子序列注意n 的值小于 15000
## 解题思路
- 这一题用暴力解法一定超时
- 这一题算是单调栈的经典解法可以考虑从数组末尾开始往前扫维护一个递减序列