mirror of
https://github.com/halfrost/LeetCode-Go.git
synced 2025-07-05 00:25:22 +08:00
规范格式
This commit is contained in:
49
leetcode/0456.132-Pattern/456. 132 Pattern.go
Normal file
49
leetcode/0456.132-Pattern/456. 132 Pattern.go
Normal 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
|
||||
}
|
63
leetcode/0456.132-Pattern/456. 132 Pattern_test.go
Normal file
63
leetcode/0456.132-Pattern/456. 132 Pattern_test.go
Normal 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")
|
||||
}
|
46
leetcode/0456.132-Pattern/README.md
Executable file
46
leetcode/0456.132-Pattern/README.md
Executable 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。
|
||||
|
||||
|
||||
## 解题思路
|
||||
|
||||
|
||||
- 这一题用暴力解法一定超时
|
||||
- 这一题算是单调栈的经典解法,可以考虑从数组末尾开始往前扫,维护一个递减序列
|
||||
|
Reference in New Issue
Block a user