设计题 总结
举个简单的例子:设计题 - 实现浏览器历史记录1.初始化 homepage 和历史记录容量2.浏览网页 和当前页相同,则直接返回 和当前页不同,如果容量满了,则删除最早的记录;清楚之前当前页的后边的历史记录,并把最新的当前页添加到最后。3.实现前进和后退功能1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192/* * Copyright (c) 2023 Lei Qi. All rights reserved. * Author: Lei Qi * Description: 浏览器实现 * Date: 2023/10/10 上午12:33 */package mainimport ( "container/list" "fmt")type...
windows IE代理问题解决
CMD 检查系统代理配置: - 通过命令提示符运行`netsh winhttp show proxy`来查看当前的系统代理设置。 - 如果需要更改系统代理,可以使用`netsh winhttp set proxy`命令进行设置。
leetcode 双指针
1234567891011121314// 删除有序数组中的重复元素func removeDuplicates(nums []int) int { slow:=0 for fast:=1;fast <len(nums);fast++ { if nums[fast] != nums[slow] { slow++// 跳到下个位置,保存slow nums[slow] = nums[fast] } } return slow +1} slow是指向当前已经处理好的序列的尾部,右指针指向待处理序列的头部。右指针不断向右移动,每次右指针指向非零数,则将左右指针对应的数交换,同时左指针右移。 注意到以下性质: 左指针左边均为非零数; 右指针左边直到左指针处均为零。因此每次交换,都是将slow指针的零与fast指针的非零数交换,且非零数的相对顺序并未改变。 12345678910func...
leetcode 单调栈
单调栈用途不太广泛,只处理一类典型的问题,比如「下一个更大元素」,「上一个更小元素」 输入一个数组 nums,请你返回一个等长的结果数组,结果数组中对应索引存储着下一个更大元素,如果没有更大的元素,就存 -1 1234567891011121314151617181920212223func nextGreaterElement(nums []int) []int { n := len(nums) // 存放答案的数组 res := make([]int, n) // 倒着往栈里放 s := make([]int, 0) for i := n - 1; i >= 0; i-- { // 倒着入栈是为了后边正着出栈 // 判定个子高矮 for len(s) > 0 && s[len(s)-1] <= nums[i] { // 矮个起开,反正也被挡着了。。。 s = s[:len(s)-1] ...
golang 修改函数传入参数切片需要指针
func dfs(root *TreeNode, res *[]int) { if root == nil { return } *res = append(*res, root.Val) dfs(root.Left, res) dfs(root.Right, res) }在这个修正后的版本中,res参数是一个指向切片的指针。这样,我们在函数内部通过*res来访问和修改原始切片的内容,确保递归调用可以正确地将结果收集到原始切片中。 在 Go 语言中,切片是引用类型。这意味着当你将切片传递给函数时,你实际上传递的是切片的引用(底层数组的地址),而不是切片的副本。因此,对切片的修改会影响到原始切片。 但是需要注意的是,虽然切片是引用类型,但当你在函数内部对切片进行重新分配(比如使用 append 函数时),你实际上是创建了一个新的切片,而原始切片并没有被修改。这是因为切片是对底层数组的一个视图,对切片的修改可能会导致底层数组的重新分配和复制。 这就是为什么在你的原始 DFS 函数中,尽管你传递了切片 res...
路由器设置桥接
设置密码类型和主路由一样 记得关闭DHCP服务器
leetcode 406. 根据身高重建队列【贪心】
406. 根据身高重建队列 - 力扣(LeetCode) 12345678910111213141516func reconstructQueue(people [][]int) [][]int { sort.Slice(people, func(i, j int) bool { if people[i][0] == people[j][0]{ return people[i][1] < people[j][1] } return people[i][0] > people[j][0] // 身高由大到小排列 })i // 再按照K进行插入排序,优先插入K小的 for i, p := range people { copy(people[p[1]+1 :i+1], people[p[1] :i=1]) // 腾空出一个位置 people[p[1]] = pi } return people} sort.Slice(people, func(i, j...
leetcode 77.组合【回溯】
77. 组合 - 力扣(LeetCode) 使用回溯的模板 123456789101112void backtracking(参数) { if (终止条件) { 存放结果; return; } for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) { 处理节点; backtracking(路径,选择列表); // 递归 回溯,撤销处理结果 }} 12345678910111213141516171819202122232425func combine(n int, k int) [][]int { res := [][]int{} path := []int{} // 结束条件 var backtracking func(n, k ,startIdx int) backtracking = func(n, k ,startIdx int) { ...
【BFS DFS通用模板】
深度优先搜索(DFS)通用模板123456789101112131415161718192021222324252627282930313233343536// 通用的深度优先搜索函数func dfs(node int, visited []bool, graph [][]int) { // 边界终止条件 if m n { } // 终止条件 if visited[node] { return } // 处理当前节点 // ... // 标记当前节点为已访问 visited[node] = true // 递归处理相邻节点 for _, neighbor := range graph[node] { dfs(neighbor, visited, graph) }}// 在主函数中调用func main() { // 初始化节点、访问数组等 // ... // 遍历所有节点 ...
leetcode 94.二叉树的中序遍历
递归方法123456789101112131415func inorderTraversal(root *TreeNode) (res []int) { var traversal func(node *TreeNode) traversal = func(node *TreeNode) { if node == nil { return } traversal(node.Left) res = append(res,node.Val) traversal(node.Right) } traversal(root) return res} 非递归方法1234567891011121314151617181920212223func inorderTraversal(root *TreeNode) []int { ans := []int{} if root == nil { return ans ...