算法专题|单调栈

初级练习

下一个更大元素 I

思路

最基础的单调栈用法。

代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
func nextGreaterElement(nums1, nums2 []int) []int {
    mp := map[int]int{}
    stack := []int{}
    for i := len(nums2) - 1; i >= 0; i-- {
        num := nums2[i]
        for len(stack) > 0 && num >= stack[len(stack)-1] {
            stack = stack[:len(stack)-1]
        }
        if len(stack) > 0 {
            mp[num] = stack[len(stack)-1]
        } else {
            mp[num] = -1
        }
        stack = append(stack, num)
    }
    res := make([]int, len(nums1))
    for i, num := range nums1 {
        res[i] = mp[num]
    }
    return res
}

商品折扣后的最终价格

思路

……

阅读全文

算法专题|滑动窗口

滑动窗口,这个算法思路非常简单,就是维护一个窗口,不断滑动,然后更新答案。

初级练习

学生分数的最小差值

思路

因为可以任意选k名学生,因此我们排序后,使用滑动窗口,维持k大小的窗口,计算每次窗口内的最大值和最小值的差,数组遍历结束后返回最小值。这道题是最基本的滑动窗口使用方法。

……

阅读全文

算法专题|双指针

双指针是一种简单而又灵活的技巧和思想,单独使用可以轻松解决一些特定问题,和其他算法结合也能发挥多样的用处。

双指针顾名思义,就是同时使用两个指针,在序列、链表结构上指向的是位置,在树、图结构中指向的是节点,通过或同向移动,或相向移动来维护、统计信息。

……

阅读全文

算法专题|二分查找

二分查找 (Binary Search) 也称折半查找,它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。

总结有以下特征和解题步骤:

  • 寻找有序性
  • 寻找判断函数,func(mid)
  • 使用的二分查找模板

基础模板

……

阅读全文

算法专题|回溯

回溯 (backtracking) 是暴力搜索的方法之一。

总结有以下特征和解题步骤:

  • 问题的解在可预估的范围内
  • 给出一个解能快速判断是否符合要求
  • 代码有固定模板
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
result = []

def backtrack(路径, 选择列表): 
    if 满足结束条件:
        result.add(路径) 
        return
    for 选择 in 选择列表: 
        做选择
        backtrack(路径, 选择列表)
        撤销选择

组合问题

题目leetcode77 组合

题解

……

阅读全文

算法专题|动态规划

动态规划(Dynamic Programming,DP)是运筹学的一个分支,是求解决策过程。总结有以下特征和解题步骤:

  • 肯定是求最值问题,并且具备重叠子问题
  • 定义问题(dp子问题的定义)
  • 寻找状态转变的所有选择情况(定义状态转移方程式)
  • 确定边界情况 bad case

01背包问题

描述

……

阅读全文

k8s|基础进阶

最近看了k8s的一本基础英文入门书籍《The Kubernetes Book》,不得不说还是英文教程写的通透,至少是可以一气呵成的从头读到尾,中文书籍可能有些作者自己都不知道写的是啥。当然学习技术相关的知识,主要还是跟踪官网获取最新动态,不过官网的资料大而全而细,因此看一些前人总结的快速入门书籍也是不错的路子,所谓的先总后方,先大后小,简单的从大、总的角度了解一下k8s,然后细致的学习其中的每个小点,这算是我自己这些天的学习总结吧。话不多说,开始记录一些书籍中的学习心得。

……

阅读全文

k8s|基础概念

参考官网,k8s的定义是:Kubernetes 是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。 Kubernetes 拥有一个庞大且快速增长的生态,其服务、支持和工具的使用范围相当广泛。

……

阅读全文

k8s|Docker学习

最近思考如何拥有自己的一套部署体系,也许以后被辞退了可以开个淘宝店接接副业,因此开始研究云原生相关,最先 接触到的自然是Docker,本文简单介绍一下Docker的基础和基本使用。

……

阅读全文

Golang|Cobra学习

阅读hugo源码,发现入口是很多commend构成,了解到cobra项目,因此学习一下cobra的基本使用。

Cobra 是一个用于创建强大的现代 CLI 应用程序的库。用于许多 Go 项目,例如 Kubernetes、Hugo 和 GitHub CLI 等等。

……

阅读全文