jsfunc main() {
// 示例:
// 1→2→3→4→5→6→7→8
head := buildList([]int{1, 2, 3, 4, 5, 6, 7, 8})
k := 3
fmt.Println("原链表:")
printList(head)
newHead := reverseKFromTail(head, k)
fmt.Println("处理后:")
printList(newHead)
}
jspackage main
import "fmt"
func quickSort(nums []int, left, right int) {
if left >= right {
return
}
pivot := nums[left] // 选最左作为基准
i, j := left, right
for i < j {
// 从右往左找小于 pivot 的
for i < j && nums[j] >= pivot {
j--
}
// 从左往右找大于 pivot 的
for i < j && nums[i] <= pivot {
i++
}
nums[i], nums[j] = nums[j], nums[i]
}
// 把 pivot 放到正确位置
nums[left], nums[i] = nums[i], nums[left]
quickSort(nums, left, i-1)
quickSort(nums, i+1, right)
}
func main() {
arr := []int{5, 2, 3, 1, 4}
quickSort(arr, 0, len(arr)-1)
fmt.Println(arr)
}
题目描述
jspackage main
import (
"fmt"
)
// maxSubArray 求最大连续子数组和
func maxSubArray(nums []int) int {
if len(nums) == 0 {
return 0
}
currentSum := nums[0]
maxSum := nums[0]
for i := 1; i < len(nums); i++ {
// 当前和要么接着加,要么从当前元素重新开始
if currentSum < 0 {
currentSum = nums[i]
} else {
currentSum += nums[i]
}
// 更新最大值
if currentSum > maxSum {
maxSum = currentSum
}
}
return maxSum
}
func main() {
nums := []int{-2, 1, -3, 4, -1, 2, 1, -5, 4}
result := maxSubArray(nums)
fmt.Println("最大连续子数组和为:", result)
}
相关信息
es基础知识点学习(Elasticsearch)
如果数据库已经能
like '%关键词%'查询了,为什么还要 ES?
| elasticsearch | mysql |
|---|---|
| Index(索引) | database |
| Document(文档) | row(行) |
| Field(字段) | column(行) |
| Mapping | 表结构 |
| Shard(分片) | 数据拆分 |
| Replic(副本) | 数据备份 |
因为 Elasticsearch 采用 Near Real-Time 机制。
写入数据后不会立即生成倒排索引,而是先写入内存 buffer 和 translog。 只有在 refresh(默认1秒)时,才会生成 segment,使数据可搜索。
这样设计是为了减少频繁构建索引的开销,提高写入性能。
二叉搜索树删除节点实现
二叉搜索树(左子树比根节点小,右子树比根节点大) 里面查找并删除一个值和节点, 删除后保持搜索树结构,返回树的跟节点,假定树节点的值不重复
jstype TreeNode struct {
Val int
Left *TreeNode
Right *TreeNode
}
func deleteNode(root *TreeNode, key int) *TreeNode {
if root == nil {
return nil
}
if key < root.Val {
root.Left = deleteNode(root.Left, key)
} else if key > root.Val {
root.Right = deleteNode(root.Right, key)
} else {
// 找到要删除的节点
if root.Left == nil {
return root.Right
}
if root.Right == nil {
return root.Left
}
// 左右子树都存在:找右子树最小节点
minNode := root.Right
for minNode.Left != nil {
minNode = minNode.Left
}
root.Val = minNode.Val
root.Right = deleteNode(root.Right, minNode.Val)
}
return root
}
每日温度
给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。 示例 1:
输入: temperatures = [73,74,75,71,69,72,76,73] 输出: [1,1,4,2,1,1,0,0] 示例 2:
输入: temperatures = [30,40,50,60] 输出: [1,1,1,0] 示例 3:
输入: temperatures = [30,60,90] 输出: [1,1,0]
jsfunc dailyTemperatures(temperatures []int) []int {
n := len(temperatures)
res := make([]int, n)
stack := []int{} // 存下标
for i := 0; i < n; i++ {
for len(stack) > 0 && temperatures[i] > temperatures[stack[len(stack)-1]] {
prev := stack[len(stack)-1]
stack = stack[:len(stack)-1]
res[prev] = i - prev
}
stack = append(stack, i)
}
return res
}