随笔分类 - 数据结构与算法
摘要:有序数组每个数平方后,不同数字的个数,时间O(n) 空间O(1) (byte) 给你一个有序整数数组,数组中的数可以是正数、负数、零,请实现一个函数,这个函数返回一个整数:返回这个数组所有数的平方值中有多少种不同的取值。举例: nums = {-1,1,1,1}, 那么你应该返回的是:1。因为这个数
阅读全文
摘要:剑指offer62 约瑟夫环 f(n,m) = (f(n-1,m)+m)%n func lastRemaining(n int, m int) int { //反复计算下标在上层的下标位置 //例如 0,1,2,3 n=4,m=2,第一次去除1后剩余2,3,0 2的位置下标0在上层的下标为(0+m)
阅读全文
摘要:单链表排序方式 148 排序链表 链表排序 插入排序 /** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */ func insertionSortList(
阅读全文
摘要:对递归的理解很浅,经常困在底层递归中,有推荐看sicp前两章的 记录下题目,斐波那契就跳过了 递归函数像是一个黑盒,不要在脑子中思考每一步递归,只需要第一步和最后的return条件,其他中间过程是重复 递归汉诺塔 题目链接 递归 func hanota(A []int, B []int, C []i
阅读全文
摘要:学习一下ac自动机,多个模式串匹配一串文本,找到文本中模式串匹配的个数 package main import ( "fmt" ) //字典树(前缀树),ac自动机基础 type Node struct { //字典树 next [26]* Node fail *Node //失配指针 flag b
阅读全文
摘要:区间合并,区间交集,区间并集等等,数组中一个重复一次,两次相关问题 区间相关 golang 使用Slice便捷排序 func main() { arr:=[][]int{{1,2},{1,3},{1,4},{1,5},{1,6}} //排序 //第一个参数不是slice则panic sort.Sli
阅读全文
摘要:感觉自己二分总是写不对,上下界的寻找出错,在此记录下 先是基本的查找和特殊查找,然后是对二分进行融合的题目 2022.8.9更新 : 全部使用y总模板即可.清晰又好用. y总二分模板和原理,超级好用 相关学习链接 y总二分模板和原理,超级好用 b乎关于二分的讨论 循环带==号的解法,别搞混了 还有这
阅读全文
摘要:lt66 加一 数组加一 func plusOne(digits []int)[]int { if len(digits)==0{ return []int{} } for i:=len(digits)-1;i>=0;i--{ //不等于9则加1返回 if digits[i]!=9{ digits[
阅读全文
摘要:括号相关的大多数用栈和dp,或者左右各自遍历一遍 lt20 合法括号 用栈,遍历string,左半边则入栈,右边则检查栈是否空和栈顶是否匹配。 c++ vector<char>str; bool isValid(string s) { for(int i=0;i<s.size();i++) { if
阅读全文
摘要:背包问题 01背包 每个物品选择一次,选或者不选 dp[i][j] 表示从下标为[0-i]的物品里任意取,放进容量为j的背包,价值总和最大是多少。 dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]); //背包容量是减少
阅读全文
摘要:牛客和leetcode有很多重复 语言时而c++ 时而go 子序列问题 最长递增子序列II 输出arr的最长递增子序列,如果多个,输出字典序最小的。 二分+dp 二分找到对应位置,maxLen记录当前位置i结尾的最长子序列值 后续找最小字典序,从后向前寻找即可。 vector<int> LIS(ve
阅读全文
摘要:计算最小的k个数,除了用堆,还可以用快排 每次返回left right相遇的位置,index>k 则向左搜,index<k 向右搜,直到index==k 剑指40 最小k个数(没要求顺序) golang快排 func getLeastNumbers(arr []int, k int) []int {
阅读全文
摘要:有趣的打印矩阵,依照此模板进行扩展 #include<iostream> #include<stdio.h> using namespace std; #define N 1005 int dp[N][N]; int main() { //四个方向移动 int dx[]={-1,0,1,0},dy[
阅读全文
摘要:先写后续,后续复杂点 func postorderTraversal(root *TreeNode) []int { res := make([]int,0) //记录访问过的节点 hash:=make(map[*TreeNode]bool) stack:=make([]*TreeNode,0) r
阅读全文
摘要:/** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */ func insertionSortList(head *ListNode) *ListNode {
阅读全文
摘要:/** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */ func detectCycle(head *ListNode) *ListNode { if he
阅读全文
摘要:不同的排序方式,如有错误请评论指出,我会及时更改 冒泡排序及其优化 冒泡排序 稳定排序,平均复杂O(n^2) 最优 O(n) //冒泡排序及其优化,优化后最优解可以O(n), //初始版本 func Bubble(array []int) { //次数小于长度-1,因为内层循环会+1 for i:=
阅读全文
摘要:golang LRU package main type Node struct { Key,Value int //双链表 Pre,Next *Node } type LruCache struct { //现有元素数量 Size int //lru容量 Capacity int //map存储链
阅读全文
摘要:package main import ( "fmt" ) //可以在初始化时自定义 const Size =10 type Node struct { Val int Next *Node } //结构体指针数组 type Table struct { Array []*Node //value个
阅读全文
摘要://leetcode submit region begin(Prohibit modification and deletion) /** * Definition for singly-linked list. * type ListNode struct { * Val int * Next
阅读全文

浙公网安备 33010602011771号