双指针技巧用不好?6道高频真题拆解,效率提升3倍不是梦

第一章:双指针技巧的核心思想与适用场景

双指针技巧是一种在数组或链表等线性数据结构上高效解决问题的算法策略。其核心思想是通过维护两个指针,分别指向不同的位置,根据特定条件移动它们,从而减少时间复杂度,避免暴力遍历。

核心思想

双指针的核心在于利用两个指针协同工作,以降低嵌套循环带来的高时间开销。常见形式包括同向指针、相向指针和快慢指针。通过合理设计移动逻辑,可以在一次遍历中完成目标匹配、去重或查找操作。

典型适用场景

  • 有序数组中的两数之和问题
  • 移除数组中的重复元素
  • 判断链表是否有环
  • 滑动窗口类问题

快慢指针示例:检测链表环

使用快慢指针可以高效判断链表是否存在环。快指针每次走两步,慢指针每次走一步,若两者相遇则说明存在环。
// 定义链表节点
type ListNode struct {
    Val  int
    Next *ListNode
}

// 检测链表是否有环
func hasCycle(head *ListNode) bool {
    if head == nil || head.Next == nil {
        return false
    }
    slow := head      // 慢指针
    fast := head.Next // 快指针
    for slow != fast {
        if fast == nil || fast.Next == nil {
            return false // 快指针到达末尾,无环
        }
        slow = slow.Next       // 走一步
        fast = fast.Next.Next  // 走两步
    }
    return true // 相遇说明有环
}

双指针类型对比

类型移动方向典型应用
相向指针从两端向中间靠拢两数之和(有序数组)
同向指针一前一后同向移动滑动窗口、移除元素
快慢指针速度不同,同向移动链表判环、找中点

第二章:同向双指针经典题型解析

2.1 快慢指针判圈——从链表环检测说起

在链表中检测是否存在环是一个经典问题,快慢指针法以其简洁高效脱颖而出。该方法通过两个移动速度不同的指针遍历链表,若存在环,则快指针终将追上慢指针。
算法核心思想
快指针每次前进两步,慢指针每次前进一步。若链表无环,快指针会率先到达尾部;若有环,两者必在环内相遇。
代码实现(Go)

func hasCycle(head *ListNode) bool {
    if head == nil || head.Next == nil {
        return false
    }
    slow, fast := head, head
    for fast != nil && fast.Next != nil {
        slow = slow.Next       // 慢指针走一步
        fast = fast.Next.Next  // 快指针走两步
        if slow == fast {      // 相遇则有环
            return true
        }
    }
    return false
}
上述代码中,slow 和 fast 初始均指向头节点。循环条件确保不越界,指针同步移动。时间复杂度为 O(n),空间复杂度为 O(1),极具实用性。

2.2 移动零问题——如何原地高效重构数组

在处理数组重构问题时,"移动零"是一个经典案例:给定一个数组,要求将所有零元素移动到数组末尾,同时保持非零元素的相对顺序,并且必须在原地完成操作。
双指针策略
使用双指针法可实现一次遍历完成重构。左指针指向下一个非零元素应放置的位置,右指针遍历数组。
func moveZeroes(nums []int) {
    left := 0
    for right := 0; right < len(nums); right++ {
        if nums[right] != 0 {
            nums[left], nums[right] = nums[right], nums[left]
            left++
        }
    }
}
该代码通过交换操作将非零元素前移,时间复杂度为 O(n),空间复杂度为 O(1)。当右指针遍历完毕,所有零已自动被推至末尾。
性能对比
  • 暴力法:两次遍历,先移非零再补零,逻辑清晰但冗余操作多
  • 双指针法:单次扫描完成重构,效率最优

2.3 最大连续1的个数——滑动窗口与指针协同

在处理数组中连续子序列问题时,滑动窗口结合双指针技术能高效求解“最大连续1的个数”。
问题建模
给定一个二进制数组,允许最多翻转k个0,目标是找到最长的连续1子数组。使用左指针left和右指针right维护窗口,窗口内0的个数不超过k。
算法实现
func longestOnes(nums []int, k int) int {
    left, maxLen, zeroCount := 0, 0, 0
    for right := 0; right < len(nums); right++ {
        if nums[right] == 0 {
            zeroCount++
        }
        for zeroCount > k { // 缩小窗口
            if nums[left] == 0 {
                zeroCount--
            }
            left++
        }
        maxLen = max(maxLen, right-left+1)
    }
    return maxLen
}
代码中zeroCount记录窗口内0的个数,当超过k时移动左指针。时间复杂度为O(n),每个元素最多被访问两次。
核心优势
  • 避免暴力枚举所有子数组
  • 动态调整窗口大小,保证最优解

2.4 最小覆盖子串——动态调整窗口的经典范式

滑动窗口的核心思想
最小覆盖子串问题要求在源字符串中找到包含目标字符集的最短连续子串。该问题典型解法采用双指针构建可变长滑动窗口,通过动态调整左右边界实现最优解。
算法步骤与数据结构
  • 使用哈希表记录目标字符串中各字符的出现频次
  • 右指针扩展窗口直至满足覆盖条件
  • 左指针收缩窗口以寻找最短有效子串
  • 维护一个计数器跟踪已满足的字符种类数
func minWindow(s string, t string) string {
    need := make(map[byte]int)
    for _, c := range []byte(t) {
        need[c]++
    }
    left, right, valid := 0, 0, 0
    start, length := 0, len(s)+1

    for right < len(s) {
        // 扩展窗口
        c := s[right]
        right++
        if _, ok := need[c]; ok {
            need[c]--
            if need[c] == 0 {
                valid++
            }
        }

        // 收缩窗口
        for valid == len(need) {
            if right-left < length {
                start = left
                length = right - left
            }
            d := s[left]
            left++
            if _, ok := need[d]; ok {
                if need[d] == 0 {
                    valid--
                }
                need[d]++
            }
        }
    }
    if length == len(s)+1 {
        return ""
    }
    return s[start : start+length]
}

上述代码中,need 哈希表记录目标字符需求量,valid 表示已满足的字符种类数。当 valid 等于 need 长度时,窗口已覆盖所有目标字符,尝试收缩左边界以优化结果。

2.5 找到字符串中所有字母异位词——模板化滑动窗口解法

在处理字符串子串匹配问题时,字母异位词的查找是一个经典场景。给定两个字符串 `s` 和 `p`,目标是找出 `s` 中所有 `p` 的字母异位词起始索引。使用**模板化滑动窗口**策略可高效解决此类问题。
核心思路
维护一个长度为 `len(p)` 的滑动窗口,在 `s` 上从左向右滑动,通过哈希表统计字符频次,比较窗口内字符分布是否与 `p` 相同。
代码实现
func findAnagrams(s, p string) []int {
    var result []int
    if len(s) < len(p) { return result }

    target, window := [26]int{}, [26]int{}
    for i := range p {
        target[p[i]-'a']++
    }

    for i := 0; i < len(s); i++ {
        window[s[i]-'a']++
        if i >= len(p) {
            window[s[i-len(p)]-'a']--
        }
        if window == target {
            result = append(result, i-len(p)+1)
        }
    }
    return result
}
上述代码通过固定窗口大小滑动,避免了动态调整边界。每次移动时更新右侧字符计数,超出窗口左侧字符则减去。当两个频次数组相等时,即找到一个异位词。时间复杂度为 O(n),空间复杂度 O(1)(仅使用固定大小数组)。

第三章:相向双指针高频实战

3.1 两数之和 II——有序数组中的高效查找策略

在已排序的整数数组中寻找两个数,使其和等于目标值,是双指针技术的经典应用场景。相比暴力枚举的时间复杂度 O(n²),利用数组有序特性可显著提升效率。
双指针算法原理
从数组两端各设一个指针,根据当前两数之和与目标值的比较结果,决定移动左指针(增大和)或右指针(减小和)。
func twoSum(numbers []int, target int) []int {
    left, right := 0, len(numbers)-1
    for left < right {
        sum := numbers[left] + numbers[right]
        if sum == target {
            return []int{left + 1, right + 1} // 题目要求1-indexed
        } else if sum < target {
            left++
        } else {
            right--
        }
    }
    return nil
}
上述代码中,left 初始指向最小值,right 指向最大值。每次迭代调整指针位置,时间复杂度为 O(n),空间复杂度 O(1)。
性能对比
  • 暴力解法:无需排序,但时间复杂度高
  • 二分查找:固定一个数,对另一个数二分搜索,O(n log n)
  • 双指针法:仅需一次遍历,最优解

3.2 三数之和——去重逻辑与边界控制的艺术

在解决“三数之和”问题时,核心在于如何高效避免重复解的产生。通过排序预处理,可将时间复杂度控制在 O(n²),并利用双指针技术优化搜索过程。
去重策略的关键时机
去重操作需在两层循环中分别进行:外层遍历固定第一个数时跳过相同元素;内层双指针移动时也需跳过重复值,防止生成重复三元组。
参考实现(Java)

for (int i = 0; i < n; i++) {
    if (i > 0 && nums[i] == nums[i-1]) continue; // 跳过重复的第一个数
    int left = i + 1, right = n - 1;
    while (left < right) {
        int sum = nums[i] + nums[left] + nums[right];
        if (sum == 0) {
            res.add(Arrays.asList(nums[i], nums[left], nums[right]));
            while (left < right && nums[left] == nums[left+1]) left++; // 去重
            while (left < right && nums[right] == nums[right-1]) right--; // 去重
            left++; right--;
        } else if (sum < 0) {
            left++;
        } else {
            right--;
        }
    }
}
上述代码中,每次添加结果后立即跳过左右指针的重复值,确保每组解唯一。边界控制严格依赖 left < right 条件,防止越界与重复计算。

3.3 接雨水——双指针优化空间复杂度的典范

问题核心与暴力解法局限
接雨水问题要求计算数组表示的高矮柱子能接多少单位的雨水。暴力方法对每个位置向左右扫描找最大值,时间复杂度为 O(n²),效率低下。
双指针优化思路
利用双指针从两端向中间遍历,维护左右最大高度。只要一侧最大值较小,当前格子的积水高度就由该侧决定,无需额外数组存储最大值,空间复杂度降至 O(1)。
func trap(height []int) int {
    left, right := 0, len(height)-1
    leftMax, rightMax, water := 0, 0, 0
    for left < right {
        if height[left] < height[right] {
            if height[left] >= leftMax {
                leftMax = height[left]
            } else {
                water += leftMax - height[left]
            }
            left++
        } else {
            if height[right] >= rightMax {
                rightMax = height[right]
            } else {
                water += rightMax - height[right]
            }
            right--
        }
    }
    return water
}
代码中,left 和 right 指针移动时,始终保证短板一侧的积水可安全累加,避免了冗余计算。leftMax 与 rightMax 动态更新边界最高柱,water 累计有效雨水量。

第四章:特殊变式与进阶挑战

4.1 环形链表检测——Floyd判圈算法深度剖析

环形链表检测是链表操作中的经典问题,广泛应用于内存管理与图结构遍历。Floyd判圈算法(又称龟兔赛跑算法)以双指针为核心,高效判断链表中是否存在环。
算法核心思想
使用两个指针:慢指针(slow)每次前移一步,快指针(fast)每次前移两步。若链表无环,快指针将率先到达尾部;若存在环,快指针终将追上慢指针。
代码实现与分析
func hasCycle(head *ListNode) bool {
    if head == nil || head.Next == nil {
        return false
    }
    slow, fast := head, head
    for fast != nil && fast.Next != nil {
        slow = slow.Next       // 慢指针走一步
        fast = fast.Next.Next  // 快指针走两步
        if slow == fast {      // 指针相遇,存在环
            return true
        }
    }
    return false
}
上述代码中,slow 和 fast 初始指向头节点。循环条件确保快指针不越界。当两指针相等时,表明链表成环,时间复杂度为 O(n),空间复杂度为 O(1)。

4.2 盛最多水的容器——贪心策略与指针移动方向

在解决“盛最多水的容器”问题时,核心在于最大化两根垂直线之间的面积。采用双指针技术,从数组两端向内收缩,是实现贪心策略的关键。
算法思路解析
每次计算当前左右指针所构成的容器容量:
area = min(height[left], height[right]) * (right - left)
为使面积尽可能大,应保留较高的一侧,移动较矮一侧的指针——因为面积受限于较短边,移动它才有可能找到更高的边界。
指针移动逻辑
  • 初始化 left = 0, right = len(height) - 1
  • 循环直至指针相遇
  • 若 height[left] < height[right],则 left++;否则 right--
该策略确保每一步都尝试突破“短板效应”,在 O(n) 时间内找到最大面积。

4.3 删除排序数组中的重复项——快慢指针拓展应用

在处理有序数组去重问题时,快慢指针是一种高效且直观的策略。通过维护两个索引,一个用于遍历(快指针),另一个用于记录不重复元素的位置(慢指针),可在原地完成操作。
算法核心思路
当数组已排序时,重复元素必然相邻。快指针逐个扫描元素,慢指针指向下一个非重复位置。仅当当前元素与前一个非重复元素不同时,才将其复制到慢指针位置。
func removeDuplicates(nums []int) int {
    if len(nums) == 0 {
        return 0
    }
    slow := 1
    for fast := 1; fast < len(nums); fast++ {
        if nums[fast] != nums[fast-1] {
            nums[slow] = nums[fast]
            slow++
        }
    }
    return slow
}
上述代码中,`slow` 初始为 1,因为首个元素无需比较。`fast` 从第二个元素开始遍历,若与前一元素不同,则写入 `slow` 位置并递增。最终返回 `slow` 作为新长度。
时间与空间复杂度
  • 时间复杂度:O(n),每个元素访问一次
  • 空间复杂度:O(1),仅使用常量额外空间

4.4 和为K的子数组——前缀和与双指针的界限辨析

在求解“和为K的子数组”问题时,前缀和是核心思想。若使用双指针(滑动窗口),仅适用于所有元素为正的场景,因为无法保证窗口收缩方向的单调性。
前缀和解法(通用)

Map<Integer, Integer> map = new HashMap<>();
map.put(0, 1);
int sum = 0, count = 0;
for (int num : nums) {
    sum += num; // 当前前缀和
    if (map.containsKey(sum - k)) {
        count += map.get(sum - k); // 存在前缀和为 sum-k,则区间和为k
    }
    map.put(sum, map.getOrDefault(sum, 0) + 1);
}
该方法时间复杂度为 O(n),利用哈希表存储各前缀和出现次数,适用于正负数混合数组。
双指针局限性
当数组含负数时,右移左指针可能导致和增大,破坏窗口有效性。因此,双指针不适用于此类场景,前缀和才是通用解法。

第五章:从刷题到面试——双指针的体系化掌握

理解双指针的核心思想
双指针并非特指两个指针,而是利用两个变量在数组或链表中协同移动,以降低时间复杂度。常见模式包括对撞指针、快慢指针和前后指针。
快慢指针解决环形链表检测
使用快慢指针可高效判断链表是否存在环。快指针每次走两步,慢指针走一步,若相遇则存在环。

func hasCycle(head *ListNode) bool {
    if head == nil {
        return false
    }
    slow, fast := head, head
    for fast.Next != nil && fast.Next.Next != nil {
        slow = slow.Next
        fast = fast.Next.Next
        if slow == fast {
            return true
        }
    }
    return false
}
对撞指针求解两数之和 II
在有序数组中查找和为 target 的两个数,可使用左右指针从两端向中间逼近。
  • 初始化 left = 0, right = len(nums)-1
  • 若 nums[left] + nums[right] == target,返回结果
  • 若和过大,right--;过小,left++
滑动窗口中的双指针应用
双指针常用于维护一个动态窗口。例如在字符串 s 中寻找包含 t 所有字符的最短子串,可通过左右指针扩展与收缩窗口实现。
问题类型指针类型典型题目
有序数组查找对撞指针两数之和 II
链表环检测快慢指针环形链表
子数组/子串问题滑动窗口最小覆盖子串
C++算法竞赛实战:从赛题拆解到工程能力提升 在计算机编程领域,算法与数据结构是解决复杂问题的核心基础,其原理在于通过高效的数据组织和计算策略,将现实问题转化为可执行的数学模型。掌握这些技术不仅能提升代码性能,更是软件工程师解决高并发、大数据等实际工程挑战的关键能力,广泛应用于搜索引擎、推荐系统、金融分析等场景。本文以C++语言为例,结合vscode配置c/c++环境和visual c++ redistributable等工程实践热词,深入解析如何通过系统性拆解竞赛题目,构建从问题抽象、算法设计到代码实现与调试的完整能力闭环,为算法竞赛备赛和长期技术成 阅读详情

相关推荐

C++循环实战:从信息素养大赛真题解析循环思维与编程能力提升

循环是编程中的基础控制结构,用于自动化重复性任务,其核心原理在于通过初始化、条件判断和迭代更新三要素,实现对固定模式或未知次数的操作序列的高效处理。掌握循环不仅关乎语法,更在于培养将复杂问题抽象为重复步骤的计算思维,这种能力在算法实现和数据处理中具有极高的技术价值。在C++编程竞赛和工程实践中,循环常与数组遍历、条件分支、嵌套逻辑结合,用于解决数列生成、数据统计、模拟过程等典型应用场景。本文以信息素养大赛真题为例,深入探讨如何将自然语言描述精准转化为高效的循环逻辑,并针对循环条件的精准控制和循环变量的灵活运

296

【AI算法面试通关宝典】:1024道高频真题精讲,助你斩获大厂Offer

掌握AI算法面试核心方法,高效突破大厂技术关卡。精选「AI算法题1024道:面试必刷清单」,覆盖机器学习、深度学习等高频考点,精讲解题思路与优化技巧,提升实战能力。系统性备考,直通名企Offer,值得收藏。

FastDebug的博客 805

校招算法笔试通关指南:高频考点拆解与实战答题策略

算法与数据结构是技术校招笔试的核心基础,也是考察候选人工程思维的重要方式。理解经典算法原理,如KMP、堆排序、并查集等,不仅有助于应对名企真题,更能提升解决实际工程问题的效率。本文从出题人视角,系统梳理校招算法卷的考点优先级与时间分配策略,剖析KMP的next数组、堆排序的siftDown、并查集优化等高频模板的工程意义,并总结双指针、动态规划、图论等题型的实战拆解方法。无论你是应届生还是在职工程师,掌握这些基础算法与答题策略,都能帮助你在有限时间内稳定发挥,拿到理想offer。

weixin_30621959的博客 282

算法面试卷到最后拼什么?1024道真题背后的能力跃迁模型曝光

掌握算法面试核心能力,从1024道真题中提炼出AI算法题1024道:面试必刷清单。覆盖大厂高频考点,拆解动态规划、机器学习等关键题型,构建系统刷题方法论。高效突破思维瓶颈,实现能力跃迁,值得收藏。

CompiShoal的博客 605

哈希表专项(一):哈希表高频真题(两数之和、三数之和)

本文系统讲解了哈希表在算法面试中的核心应用,重点解析了两数之和和三数之和两大高频真题。哈希表凭借O(1)查找特性,能高效解决查找、去重问题。两数之和采用哈希表"边存边查"策略,将时间复杂度优化至O(n);三数之和则结合排序、双指针和三层去重技巧,实现O(n²)解法。文章提供了可直接手撕的代码模板,并详细分析了面试常见追问点和避坑指南,帮助读者掌握哈希表的核心应用场景和优化思路。

linwenglong7155的博客 22

银河飞腾FT6678实战指南:OpenMP多核并行编程优化技巧

本文详细介绍了在银河飞腾FT6678多核处理器上使用OpenMP进行并行编程的实战技巧与优化方法。从基础语法到环境配置,再到性能优化的五大核心技巧,包括循环并行化、并行粒度控制、reduction子句使用等,帮助开发者充分发挥FT6678的8核计算能力。通过实际案例展示如何将图像处理算法从200ms优化到28ms,并深入探讨了任务调度、内存访问优化等进阶主题。

weixin_29234423的博客 287

华为OD机试备考攻略:从真题解析到实战技巧

数据结构与算法是计算机科学的核心基础,其原理在于通过高效组织与管理数据,优化问题求解过程。掌握经典数据结构(如数组、链表、栈、队列、哈希表、树)和算法(如排序、查找、DFS/BFS、动态规划、双指针、滑动窗口)的技术价值在于,能显著提升代码效率与系统性能,是解决复杂工程问题的关键能力。这些技术在搜索引擎、推荐系统、实时数据处理等应用场景中无处不在。本文聚焦于华为OD机试真题备考,深入剖析其高频考点动态规划与滑动窗口的解题心法,并提供针对C++/Java/Python不同语言的工程实践策略,帮助考生系统构建解

weixin_34062469的博客 346

opencode 完全指南:终端AI编程助手的安装、模型配置与实战

在AI编程助手快速迭代的当下,开发者对终端环境下的自动化编码需求愈发强烈。以自然语言驱动代码修改、命令执行与测试验证,已成为提升工程效率的重要方向。这类工具普遍遵循模型无关的设计原则,通过兼容OpenAI格式的接口接入多种大模型,并借助多会话管理、Skills、Memory等机制实现可审查、可干预的闭环流程。从安装配置到日常使用,再到apihub网关与免费模型的接入,终端AI助手在代码审查、跨文件重构、浏览器自动化验证等场景中展现出独特价值。本文聚焦opencode这一开源CLI工具,详细拆解其核心定位、模

weixin_33868027的博客 418

揭秘B站1024程序员节题目答案:5大高频算法题型深度拆解与代码实现

auto-generated

CodeTrick的博客 1100

计算机视觉之姿态识别(原理+代码实操)

计算机视觉中的姿态识别原理+模型介绍,同时通过代码实操简单的演示基于mediapipe的单人姿态识别。

输出既学习 3万+

有限差分法地震数据正演模拟(二)

正演模拟,是在地球物理勘探研究中,根据地质体的形状、产状和物性数据,通过构造数学模型计算得到其理论值(数学模拟),或通过构造实体模型来观测模型所产生的地球物理效应的数值(物理模拟)。p(t+1,x,z)即为下一时刻的波长信息,该波动方程的意义就是通过前一时刻(p(t-1,x,z))和现在时刻(p(t,x,z))预测下一时刻波的传播情况。声波波动方程:反应声波的传播规律,描述最简单的波现象的方程,p代表波场信息,v表示速度场信息因为速度只与速度场有关,所以只与x,z有关。其结果也可以作为反演的验证。

weixin_46285501的博客 3937

华为OD高频考题解析:字符串处理实战

从历年真题中筛选出最具代表性的10道字符串题目,覆盖了常见的五大类型:子串匹配、字符统计、格式转换、正则应用和特殊规则处理。每道题都拆解为"题目描述-示例分析-核心思路-边界条件"四个部分,比如经典的字符串压缩题,重点讲解双指针法的实现逻辑和空间优化技巧。上完成,最惊喜的是它的一键部署功能——写完代码直接生成可访问的练习系统,不用操心服务器配置。为了系统性地提升解题能力,我尝试开发了一个专门的练习系统,今天把整个实践过程记录下来,希望能帮到有同样需求的同学。使用时可以直接调用封装好的函数,节省编码时间。

JetRaven12的博客 503

从零到一:DETR模型在自定义数据集上的实战部署与调优

本文详细介绍了DETR模型在自定义数据集上的实战部署与调优过程,包括环境准备、数据转换、模型配置、训练技巧及问题排查。通过具体代码示例和实用建议,帮助开发者高效完成从零到一的DETR模型部署,特别适合目标检测领域的实践应用。

weixin_42524100的博客 463

华中师范大学838考研专业课高效复习指南:真题驱动与核心考点解析

在计算机专业课程学习中,数据结构、计算机组成原理和操作系统构成了核心知识体系,其原理与应用是衡量专业能力的重要标尺。理解这些基础概念及其底层原理,对于构建扎实的计算机科学基础、提升解决复杂工程问题的能力具有关键价值,尤其在研究生入学考试等选拔性场景中。本文聚焦于华中师范大学计算机专业考研(838专业课)的备考实践,针对考生普遍面临的“信息过载”与“复习效率”挑战,提供一套基于真题分析与考纲解读的科学方法论。通过深入剖析历年真题规律,系统梳理各科目的高频考点与命题趋势,旨在帮助考生精准定位复习重点,优化时间分

weixin_30947043的博客 377

基于Python的虚拟货币社区情绪分析与市场价格预测爬虫实现

本文探讨了如何利用Python爬虫技术获取虚拟货币社区数据,并通过情感分析预测市场价格走势。我们将使用最新的异步爬虫框架、自然语言处理技术和机器学习模型,构建一个完整的社区情绪分析系统。本文提供了详细的代码实现和理论解释,适合作为毕业设计参考。关键词:Python爬虫、虚拟货币、情感分析、价格预测、异步爬虫、机器学习爬虫框架aiohttp和httpx用于异步HTTP请求HTML解析和parsel数据存储MongoDB和Pandas用于数据处理自然语言处理库和VADER情感分析工具机器学习和。

2201_76125261的博客 523

手把手教你学simulink(12.10)--设计和仿真一个用于控制飞机纵向运动(高度和速度)的多变量控制系统

飞机的纵向运动控制是航空工程中的一个重要问题,涉及飞机的高度和速度的精确控制。多变量控制系统可以同时控制多个飞行参数,确保飞机在最佳条件下运行。Simulink提供了一个强大的平台,用于建模、仿真和分析动态系统,非常适合设计和测试多变量控制系统。通过本项目的实施,我们成功设计和仿真了一个用于控制飞机纵向运动(高度和速度)的多变量控制系统。该项目展示了从系统建模、控制器设计、仿真验证到结果分析的完整流程,为多变量控制系统的设计提供了有价值的参考。

MHD0815的博客 598

如何用Python高效刷透1024答题赛真题?资深架构师亲授4大技巧

auto-generated

AlgoInk的博客 909

基于Simulink的固态变压器(SST)多级协同控制​

本文介绍了基于Simulink的固态变压器(SST)多级协同控制方法。SST作为智能电网关键设备,其三级架构(AC-DC整流、DC-DC隔离、DC-AC逆变)存在级间耦合问题。文章提出纵向解耦与横向联动相结合的协同控制策略,详细推导了各级控制算法,并通过Simulink实现了10kV/400V级联型SST系统建模。仿真结果显示,在±20%电网波动和0-100%负载跳变下,系统能保持直流母线电压波动<2%。文章还提供了工程部署建议和代码生成方法,为SST的研发提供了实用指导。

amy_mhd的博客 301

华为OD机试真题解析与编程实战指南

使用InsCode(快马)平台的"项目克隆"功能,可以一键复现他人分享的高分题解,通过对比学习提升编码规范性。平台自动保存所有练习记录,方便随时查看历史提交版本,特别适合考前冲刺阶段集中刷题。

AzureMeadow65的博客 270

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

【JS算法题库通关指南】:掌握大厂高频算法题的5大核心解题模板

掌握大厂高频算法题解法,突破JS算法题库难关。归纳5大核心解题模板,覆盖双指针、递归回溯等关键方法,适用于前端面试与力扣刷题实战。逻辑清晰,效率提升显著,值得收藏。

AlgoPerch的博客 407

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

华为OD机试真题刷题全攻略:从入门到通关,抢占职场进阶快车道

摘要: 华为OD岗位凭借稳定发展、完善培养体系和优厚薪资成为技术人才热门选择,其机试作为核心门槛,注重基础、应用与思维考察。备考需避免盲目刷题、死记模板等误区,重点掌握高频考点(字符串处理、数组操作、哈希表等)及机试规则(ACM模式、用例通过率判分)。本文提供三大编程语言万能模板与真题解析,帮助考生高效突破机试,规避常见失分点,提升竞争力。

从零开始,掌握网络安全。提供全面的网络安全教程、攻防演练技巧和行业动态。 394

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【Python面试高频算法题解析】:1024程序员节必看的十大经典算法真题详解

掌握Python面试高频算法题解析,助力1024程序员节高效备战。精选十大经典真题,涵盖递归、动态规划等核心方法,适用于大厂算法面试场景。典型例题+代码实现+思路拆解,提升解题思维,值得收藏。

ByteShoal的博客 791

蓝桥杯JAVA数组操作核心技巧:双指针、前缀和与差分实战解析

数组作为计算机科学中最基础的数据结构,其核心在于连续内存存储与O(1)随机访问特性。这一特性衍生出双指针、滑动窗口等高效算法思想,通过指针协同遍历能在O(n)时间复杂度内解决元素查找、区间统计等问题。在工程实践中,前缀和与差分技术成为处理区间查询与批量修改的利器,前缀和通过预处理实现区间和O(1)查询,差分则通过逆运算将区间更新降为O(1)操作。这些技术在算法竞赛如蓝桥杯JAVA组中尤为关键,常见于子数组求和、矩阵变换等高频题型。掌握数组底层原理与核心算法框架,能显著提升对摩尔投票法、原地操作等考点的解题效

chuange6363的博客 444

提升编程能力:机试代码训练与算法优化技巧

编程能力是衡量工程师水平的核心指标之一,尤其在技术面试中,机试环节往往决定成败。通过系统的机试代码训练,可以有效提升算法思维、编码质量和边界条件处理能力。算法优化是编程中的关键技能,常见技巧包括空间换时间、双指针法等,这些方法能显著提升代码效率。在实际应用中,这些技术广泛用于字符串处理、树形结构遍历等问题。本文以'最长无重复字符子串'和'盛最多水的容器'为例,详细解析了滑动窗口和双指针技术的实现原理与优化效果。对于求职者而言,掌握这些核心算法和优化技巧,能够大幅提升机试表现和面试通过率。

362

好未来2017秋招笔试真题二解析:从字符串压缩到两数之和的备考指南

校招笔试中,算法题与数据结构基础往往决定成败,但真正拉开差距的,是对边界条件的敏感度和工程化编码习惯。字符串压缩、两数之和这类经典题目,看似基础,实则隐含对代码规范、异常处理与复杂度分析的深层考察。哈希表、双指针、区间统计等高频考点,更是技术面试中反复出现的核心能力。针对教育科技公司的笔试风格,从题目拆解到测试用例设计,再到复盘方法论,系统梳理一套可复用的备考路径。帮助求职者将零散刷题经验转化为结构化的解题思维,从容应对秋招笔试与后续技术面。本文以好未来2017秋招笔试真题二为切入点,完整还原高频题型的思考

weixin_33816946的博客 370

算法刷题别瞎刷!AI 岗高频 200 题 + 解题思路,直接背

算法刷题不是越多越好,而是越精准越好。这200题覆盖了AI岗90%以上的高频考点,只要把这些题的思路吃透,代码写熟,面试时算法环节基本没问题。我当年备战时,就是把这200题刷了4遍,整理了完整的解题笔记,面试字节、百度时都遇到了原题。现在把这份清单和笔记整理好了,需要的同学可以评论区扣“AI刷题”,我直接发你。祝大家都能高效刷题,顺利拿到心仪的AI岗offer!如果有刷题过程中的问题,也可以在评论区交流~

zydsp的博客 1084
上一篇: AZ-204最新考纲变动解读(2024下半年唯一权威分析)
下一篇: 实时处理瓶颈怎么破?Spark与Flink对比实战,90%的人都用错了
CompiGlow
博客等级 码龄1年 159粉丝 1987原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值