代码随想录刷题-双指针总结篇

news2025/1/16 5:40:46

文章目录

  • 双指针
    • 移除元素
      • 习题
      • 我的解法
      • 双指针优化
    • 反转字符串
      • 习题
      • 我的解法
    • 剑指 Offer 05. 替换空格
      • 习题
      • 我的解法
      • 正确解法
    • 反转字符串里的单词
      • 习题
      • 我的解法
    • 反转链表
      • 习题
      • 我的解法
    • 删除链表的倒数第 N 个节点
      • 习题
      • 我的解法
    • 相交链表
      • 习题
      • 我的解法
    • 环形链表 II
      • 习题
      • 我的解法
    • 三数之和
      • 习题
      • 我的解法
    • 四数之和
      • 习题
      • 我的解法

双指针

本章节为前面章节出现过的题,只不过都是用双指针进行解题,这里还是重做一下,检查下能不能写出来。具体的题解看我之前发的文章

移除元素

本节对应代码随想录中:代码随想录,对应视频链接为:数组中移除元素并不容易! | LeetCode:27. 移除元素_哔哩哔哩_bilibili

习题

给你一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,并返回移除后数组的新长度。
不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

示例 1:
输入:nums = [3,2,2,3], val = 3
输出:2, nums = [2,2]
解释:函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。例如,函数返回的新长度为 2 ,而 nums = [2,2,3,3] 或 nums = [2,2,0,0],也会被视作正确答案。

我的解法

写的代码和官方题解的基本一致。不过解法还可以优化下,之前写的时候没有写优化解法,这里重新写下。

class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        int slow = 0;
        for (int i = 0; i < nums.size(); i++)
        {
            if(nums[i]!=val){
                nums[slow++] = nums[i];
            }
        }
        return slow;
    }
};

双指针优化

当移除的元素在开头时,我们要将每个元素都左移一位。如[1,2,3,4,5],val=1。实际上只要将右边的5移到左边的1的位置即可。

可以使用两个指针,分别位于数组的左右两端,如果左指针等于 val 则将右指针指向的元素复制到左指针的位置。直到两个指针重合为止。

需要注意的是如果写成 right = nums.size()-1 那 while 的条件是 <=。原因是最后返回的是 left 值,当 left=right 时,如果此时 nums[left] != val 还是要将 left+1。如 nums={3,2,2,3},val=3 时,当 left=right=1,nums[1]=2时,还是要执行一次 while 让 left+1,从而返回 left=2,如果 while 写的 < 那就会错误的返回 left=1

class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        int left = 0, right = nums.size()-1;
        // 注意是<=
        while (left <= right) {
            if (nums[left] == val) {
                nums[left] = nums[right];
                right--;
            } else {
                left++;
            }
        }
        return left;
    }
};

反转字符串

本节对应代码随想录中:代码随想录,讲解视频:字符串基础操作! | LeetCode:344.反转字符串_哔哩哔哩_bilibili

习题

题目链接:344. 反转字符串 - 力扣(LeetCode)

编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。

示例 1:
输入:s = ["h","e","l","l","o"]
输出:["o","l","l","e","h"]

我的解法

左右两个指针不断交换向中间移动即可。交换可以定义一个临时字符 tmp 进行交换,也可以使用异或进行交换。

class Solution {
public:
    void reverseString(vector<char>& s) {
        int size = s.size();
        for (int i = 0; i < size/2; i++)
        {
            swap(s[i],s[size-1-i]);
        } 
    }
};

剑指 Offer 05. 替换空格

本节对应代码随想录中:代码随想录,讲解视频:暂无

习题

题目链接:剑指 Offer 05. 替换空格 - 力扣(LeetCode)

请实现一个函数,把字符串 s 中的每个空格替换成"%20"。

示例 1:
输入:s = "We are happy."
输出:"We%20are%20happy."

我的解法

写的还不是正确答案,还是新建了一个字符串。我是从前向后填充字符串,所以要新建一个字符串,其实从后往前的话就不用新建字符串了。

class Solution {
   public:
    string replaceSpace(string s) {
        // 先扩充字符串至替换后的长度
        int count = 0;
        int size = s.size();
        for (int i = 0; i < size; i++) {
            if (s[i] == ' ') {
                count++;
            }
        }
        // 填充res字符串
        string res;
        res.resize(size + count * 2);
        int slow = 0;
        for (int i = 0; i < size; i++) {
            if (s[i] != ' ') {
                res[slow++] = s[i];
            } else {
                res[slow++] = '%';
                res[slow++] = '2';
                res[slow++] = '0';
            }
        }
        return res;
    }
};

正确解法

从后往前覆盖字符串,这样就避免了更改原有的字符。一个指针从后向前遍历原来的字符串,另一个指针负责从后向前填充新的字符串

class Solution {
   public:
    string replaceSpace(string s) {
        // 先扩充字符串至替换后的长度
        int count = 0;
        int oldSize = s.size();
        for (int i = 0; i < oldSize; i++) {
            if (s[i] == ' ') {
                count++;
            }
        }
        // 填充新的字符串
        s.resize(oldSize + count * 2);
        int newSize = s.size();
        for (int i = oldSize-1,j=newSize-1; i >= 0; i--) {
            if (s[i] != ' ') {
                s[j--] = s[i];
            } else {
                s[j--] = '0';
                s[j--] = '2';
                s[j--] = '%';
            }
        }
        return s;
    }
};

反转字符串里的单词

本节对应代码随想录中:代码随想录,讲解视频:字符串复杂操作拿捏了! | LeetCode:151.翻转字符串里的单词_哔哩哔哩_bilibili

习题

题目链接:151. 反转字符串中的单词 - 力扣(LeetCode)

给你一个字符串 s ,请你反转字符串中单词的顺序。

单词是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的单词分隔开。

返回单词顺序颠倒且单词之间用单个空格连接的结果字符串。

注意:输入字符串 s 中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。

示例 2:
输入:s = "  hello world  "
输出:"world hello"
解释:反转后的字符串中不能存在前导空格和尾随空格。

我的解法

我写的代码反转单词和代码随想录的差不多,不过还是和第一次写的差不多,有点我自己的风格。删除空格部分和代码随想录上题解类似,代码随想录是先加空格,再加字符。我是先加字符,再判断条件加空格

class Solution {
   public:
    string reverseWords(string s) {
        // 整体反转
        reverse(s.begin(), s.end());
        // 去除空格
        int now = 0;
        for (int i = 0; i < s.size(); i++) {
            if (s[i] != ' ') {
                s[now++] = s[i];
            } else {
                if (i < s.size() - 1 && s[i + 1] != ' ' && now != 0) {
                    s[now++] = ' ';
                }
            }
        }
        s.resize(now);
        // 反转单词
        int last = 0;
        for (int i = 0; i <= s.size(); i++) {
            if (s[i] == ' ' || i == s.size()) {
                reverse(s.begin() + last, s.begin() + i);
                last = i + 1;
            }
        }
        return s;
    }
};

反转链表

本节对应代码随想录中:代码随想录,讲解视频:帮你拿下反转链表 | LeetCode:206.反转链表 | 双指针法 | 递归法_哔哩哔哩_bilibili

习题

题目链接:206. 反转链表 - 力扣(LeetCode)

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

示例:
输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]

我的解法

还是写的麻烦了,定义了一个虚拟头结点,但这样的话,就还要让原来的 head 的 next 指向 nullptr。其实可以直接让左边的指针等于 nullptr 而不是虚拟头结点,这样就不用再执行 head->next = nullptr; 这个操作了。

class Solution {
   public:
    ListNode* reverseList(ListNode* head) {
        if(head==nullptr){
            return nullptr;
        }
        ListNode* dummyHead = new ListNode(0, head);
        ListNode* left = dummyHead;
        ListNode* right = head;
        while (right != nullptr) {
            ListNode* tmp = right->next;
            right->next = left;
            left = right;
            right = tmp;
        }
        head->next = nullptr;
        return left;
    }
};

双指针的解法正确答案如下

class Solution {
   public:
    ListNode* reverseList(ListNode* head) {
        ListNode* right = head;
        ListNode* left = nullptr;
        while (right != nullptr) {
            ListNode* tmp = right->next;
            right->next = left;
            left = right;
            right = tmp;
        }
        return left;
    }
};

这道题更好的解法是递归法,由于这章节主要讲的是双指针的使用,这里就不再写递归法的代码了

删除链表的倒数第 N 个节点

本节对应代码随想录中:代码随想录,讲解视频:链表遍历学清楚! | LeetCode:19.删除链表倒数第N个节点_哔哩哔哩_bilibili

习题

题目链接:19. 删除链表的倒数第 N 个结点 - 力扣(LeetCode)

给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。

  • 输入:head = [1,2,3,4,5], n = 2;输出:[1,2,3,5]
  • 输入:head = [1], n = 1;输出:[]
  • 输入:head = [1,2], n = 1;输出:[1]

我的解法

写的代码和正确答案基本一致,就不解释原因了

class Solution {
public:
    ListNode* removeNthFromEnd(ListNode* head, int n) {
        // 0 1    1
        ListNode* dummyHead = new ListNode(0,head);
        ListNode* left = dummyHead;
        ListNode* right = dummyHead;
        // 先让右指针向右移n个位置
        for (int i = 0; i < n; i++)
        {
            right = right->next;
        }
        // 向右遍历链表
        while(right->next!=nullptr){
            right = right->next;
            left = left->next;
        }
        // 删除节点
        ListNode* tmp = left->next;
        left->next = tmp->next;
        delete tmp;
        return dummyHead->next;
    }
};

相交链表

本节对应代码随想录中:代码随想录,暂无讲解视频

习题

题目链接:160. 相交链表 - 力扣(LeetCode)

给你两个单链表的头节点 headAheadB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null

图示两个链表在节点 c1 开始相交:

题目数据保证整个链式结构中不存在环。

注意,函数返回结果后,链表必须保持其原始结构。

自定义评测:
评测系统的输入如下(你设计的程序不适用此输入):

  • intersectVal - 相交的起始节点的值。如果不存在相交节点,这一值为 0
  • listA - 第一个链表
  • listB - 第二个链表
  • skipA - 在 listA 中(从头节点开始)跳到交叉节点的节点数
  • skipB - 在 listB 中(从头节点开始)跳到交叉节点的节点数
    评测系统将根据这些输入创建链式数据结构,并将两个头节点 headA 和 headB 传递给你的程序。如果程序能够正确返回相交节点,那么你的解决方案将被视作正确答案。

示例 1:

输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,6,1,8,4,5], skipA = 2, skipB = 3
输出:Intersected at ‘8’
解释:相交节点的值为 8 (注意,如果两个链表相交则不能为 0)。
从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,6,1,8,4,5]。
在 A 中,相交节点前有 2 个节点;在 B 中,相交节点前有 3 个节点。
— 请注意相交节点的值不为 1,因为在链表 A 和链表 B 之中值为 1 的节点 (A 中第二个节点和 B 中第三个节点) 是不同的节点。换句话说,它们在内存中指向两个不同的位置,而链表 A 和链表 B 中值为 8 的节点 (A 中第三个节点,B 中第四个节点) 在内存中指向相同的位置。

进阶:你能否设计一个时间复杂度 O(m + n) 、仅用 O(1) 内存的解决方案?

我的解法

我的解法基本和正确题解差不多。只不过和第一次写的时候一样,在移动长的链表的时候我还是计算两个链表移动的长度然后分别移动对应的长度。代码随想录中是让第一个链表变成最长的链表,然后移动最长的链表,两种写法只是思路不同

class Solution {
   public:
    ListNode* getIntersectionNode(ListNode* headA, ListNode* headB) {
        // 记录两个链表的长度
        ListNode* cur = headA;
        int sizeA = 0;
        while (cur != nullptr) {
            sizeA++;
            cur = cur->next;
        }
        cur = headB;
        int sizeB = 0;
        while (cur != nullptr) {
            sizeB++;
            cur = cur->next;
        }
        // 让长的移动到和短的一个起点
        ListNode* curA = headA;
        ListNode* curB = headB;
        int moveA = sizeA > sizeB ? sizeA - sizeB : 0;
        int moveB = sizeB > sizeA ? sizeB - sizeA : 0;
        for (int i = 0; i < moveA; i++)
        {
            curA = curA->next;
        }
        for (int i = 0; i < moveB; i++)
        {
            curB = curB->next;
        }
        // 同时向后遍历
        while(curA!=nullptr){
            if(curA==curB){
                return curA;
            }
            curA = curA->next;
            curB = curB->next;
        }
        return nullptr;
    }
};

环形链表 II

本节对应代码随想录中:代码随想录,讲解视频:把环形链表讲清楚! 如何判断环形链表?如何找到环形链表的入口? LeetCode:142.环形链表II_哔哩哔哩_bilibili

习题

题目链接:142. 环形链表 II - 力扣(LeetCode)

给定一个链表的头节点 head ,返回链表开始入环的第一个节点。如果链表无环,则返回 null。

如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。

不允许修改链表。

示例 1:
在这里插入图片描述

输入:head = [3,2,0,-4], pos = 1
输出:返回索引为 1 的链表节点
解释:链表中有一个环,其尾部连接到第二个节点。

进阶:你是否可以使用 O(1) 空间解决此题?

我的解法

写的代码思路和正确答案一致,不过可以不用定义虚拟头结点,另外可以将 while 循环中的 if 判断放到 while 循环的判断里面。

至于思路方面,判断有环就是两个指针一个一次走两步,一个一次走一步,若相遇说明有环。相遇的时候,另一个指针从 head 开始向后每次和 slow 指针一样走一步,当他们相遇的时候,所处节点就是环的入口,这个直接记住就行了,推导方面我之前的博客中解释了原理。

class Solution {
   public:
    ListNode* detectCycle(ListNode* head) {
        ListNode* dummyHead = new ListNode(0, head);
        // 判断是否有环
        ListNode* fast = dummyHead;
        ListNode* slow = dummyHead;
        while (1) {
            if (fast->next == nullptr || fast->next->next == nullptr) {
                return nullptr;
            }
            fast = fast->next->next;
            slow = slow->next;
            // 相遇说明有环
            if(fast==slow){
                ListNode* res =dummyHead;
                while(res!=slow){
                    res = res->next;
                    slow = slow->next;
                }
                return res;
            }
        }
    }
};

三数之和

本节对应代码随想录中:代码随想录,讲解视频:梦破碎的地方!| LeetCode:15.三数之和_哔哩哔哩_bilibili

习题

题目链接:15. 三数之和 - 力扣(LeetCode)

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请

你返回所有和为 0 且不重复的三元组。

注意:答案中不可以包含重复的三元组。
示例 1:

输入:nums = [-1,0,1,2,-1,-4]
输出:[[-1,-1,2],[-1,0,1]]
解释:
nums[0] + nums[1] + nums[2] = (-1) + 0 + 1 = 0 。
nums[1] + nums[2] + nums[4] = 0 + 1 + (-1) = 0 。
nums[0] + nums[3] + nums[4] = (-1) + 2 + (-1) = 0 。
不同的三元组是 [-1,0,1] 和 [-1,-1,2] 。
注意,输出的顺序和三元组的顺序并不重要。

我的解法

在写这道题的时候,理所当然的对数组排序,然后用哈希表进行求解。但由于要去重,用哈希表去重会很麻烦,最终也没写出来,看了代码随想录题解后自己又写了一遍,果然还是要多刷几遍题才能加深印象

哈希表去重的麻烦在于,若是用 map 记录位置,但结果如0 0 0这种,查找0可能得到的是第一个0的位置,这样就不确定找到的0与前两个 for 循环得到的0是否是同一个元素。而用双指针查找到三元组后移动指针就能轻松解决重复的问题

class Solution {
   public:
    vector<vector<int>> threeSum(vector<int>& nums) {
        sort(nums.begin(), nums.end());
        vector<vector<int>> res;
        for (int i = 0; i < nums.size(); i++) {
            // 对a去重
            if (i > 0 && nums[i] == nums[i - 1]) {
                continue;
            }
            int left = i + 1;
            int right = nums.size() - 1;
            while (left < right) {
                if (nums[i] + nums[left] + nums[right] > 0) {
                    right--;
                } else if (nums[i] + nums[left] + nums[right] < 0) {
                    left++;
                } else {
                    res.push_back({nums[i], nums[left], nums[right]});
                    // 对b和c去重
                    while (left < right && nums[left] == nums[left + 1]) {
                        left++;
                    }
                    while (left < right && nums[right] == nums[right - 1]) {
                        right--;
                    }
                    // 两个指针向内收缩
                    left++;
                    right--;
                }
            }
        }
        return res;
    }
};

四数之和

本节对应代码随想录中:代码随想录,讲解视频:难在去重和剪枝!| LeetCode:18. 四数之和_哔哩哔哩_bilibili

习题

题目链接:18. 四数之和 - 力扣(LeetCode)

给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复):

0 <= a, b, c, d < n
a、b、c 和 d 互不相同
nums[a] + nums[b] + nums[c] + nums[d] == target
你可以按任意顺序返回答案。

示例 1:
输入:nums = [1,0,-1,0,-2,2], target = 0
输出:[[-2,-1,1,2],[-2,0,0,2],[-1,0,0,1]]

示例 2:
输入:nums = [2,2,2,2,2], target = 8
输出:[[2,2,2,2]]

我的解法

四数之和和三数之和类似,只要掌握三数之和,四数之和就是加层 for 循环,最后的两个数的查找还是用双指针进行查找,能优化一个量级。不过我的解法中加上剪枝(当前最小的数都大于 target 且大于0)不符合条件时 break 会更快点

class Solution {
   public:
    vector<vector<int>> fourSum(vector<int>& nums, int target) {
        sort(nums.begin(), nums.end());
        vector<vector<int>> res;
        for (int i = 0; i < nums.size(); i++) {
            // 对a去重
            if (i > 0 && nums[i] == nums[i - 1]) {
                continue;
            }
            for (int j = i + 1; j < nums.size(); j++) {
                // 对b去重
                if (j > i + 1 && nums[j] == nums[j - 1]) {
                    continue;
                }
                int left = j + 1;
                int right = nums.size() - 1;
                while (left < right) {
                    if ((long)nums[i] + nums[j] + nums[left] + nums[right] > target) {
                        right--;
                    } else if ((long)nums[i] + nums[j] + nums[left] + nums[right] < target) {
                        left++;
                    } else {
                        res.push_back(
                            {nums[i], nums[j], nums[left], nums[right]});
                        // 对c和d去重
                        while (left < right && nums[left] == nums[left + 1]) {
                            left++;
                        }
                        while (left < right && nums[right] == nums[right - 1]) {
                            right--;
                        }
                        left++;
                        right--;
                    }
                }
            }
        }
        return res;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/415703.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unity VFX -- (3)创建环境粒子系统

粒子系统中最常用也最重要的一种使用场景是实现天气效果。只需要做很少修改&#xff0c;场景就能很快从蓝天白云变成雪花飘舞。 和之前看到的粒子系统从一个源头发出粒子的情况不同&#xff0c;天气效果完全围绕着场景。 新增和放置一个新的粒子系统 为了创建下雨或下雪的天气…

【从零开始学Skynet】基础篇(三):服务模块常用API

1、服务模块 Skynet提供了开启服务和发送消息的API&#xff0c;必须要先掌握它们。列出了Skynet中8个最重要的API&#xff0c;PingPong程序会用到它们。 Lua API说明newservice(name, ...) 启动一个名为 name 的新服务&#xff0c;并返回服务的地址。 start(func) …

【学习笔记】unity脚本学习(二)(Time时间体系、Random随机数、Mathf数学运算)

目录Time时间体系timeScalemaximumDeltaTimefixedDeltaTimecaptureDeltaTimedeltaTime整体展示Random随机数Mathf数学运算IMathf.Round()Mathf.Ceil() Mathf.CeilToInt()Mathf.SignMathf.ClampMathf数学运算II-曲线变换Lerp 线性插值LerpAngleSmoothDamp疑问&#xff1a;Smooth…

自己动手写编译器:DFA跳转表的压缩算法

在编译器开发体系中有两套框架&#xff0c;一个叫"lex && yacc", 另一个名气更大叫llvm&#xff0c;这两都是开发编译器的框架&#xff0c;我们只要设置好配置文件&#xff0c;那么他们就会生成相应的编译器代码&#xff0c;通常是c或者c代码&#xff0c;然后…

AI自动寻路AStar算法【图示讲解原理】

文章目录AI自动寻路AStar算法背景AStar算法原理AStar寻路步骤AStar具体寻路过程AStar代码实现运行结果AI自动寻路AStar算法 背景 AI自动寻路的算法可以分为以下几种&#xff1a; 1、A*算法&#xff1a;A*算法是一种启发式搜索算法&#xff0c;它利用启发函数&#xff08;heu…

Jmeter接口测试和性能测试

目前最新版本发展到5.0版本&#xff0c;需要Java7以上版本环境&#xff0c;下载解压目录后&#xff0c;进入\apache-jmeter-5.0\bin\&#xff0c;双击ApacheJMeter.jar文件启动JMemter。 1、创建测试任务 添加线程组&#xff0c;右击测试计划&#xff0c;在快捷菜单单击添加-…

STM32F103RCT6驱动SG90舵机-完成正反转角度控制

一、SG90舵机介绍 SG90是一种微型舵机&#xff0c;也被称为伺服电机。它是一种小型、低成本的直流电机&#xff0c;通常用于模型和机器人控制等应用中。SG90舵机可以通过电子信号来控制其精确的位置和速度。它具有体积小、重量轻、响应快等特点&#xff0c;因此在各种小型机械…

亚马逊测评只能下单上好评?卖家倾向养号测评还有这些骚操作

亚马逊测评这对于绝大部分亚马逊卖家来说都不陌生&#xff0c;如今的亚马逊市场也很多卖家都在用测评科技来打造爆款。不过很多对于亚马逊测评的认知只停留在简单的刷销量&#xff0c;上好评。殊不知亚马逊养号测评还有其它强大的骚操作。 亚马逊自养号测评哪些功能呢&#xf…

PyTorch 深度学习实战 |用 TensorFlow 训练神经网络

为了更好地理解神经网络如何解决现实世界中的问题&#xff0c;同时也为了熟悉 TensorFlow 的 API&#xff0c;本篇我们将会做一个有关如何训练神经网络的练习&#xff0c;并以此为例&#xff0c;训练一个类似的神经网络。我们即将看到的神经网络&#xff0c;是一个预训练好的用…

【深度学习】【分布式训练】Collective通信操作及Pytorch示例

相关博客 【深度学习】【分布式训练】Collective通信操作及Pytorch示例 【自然语言处理】【大模型】大语言模型BLOOM推理工具测试 【自然语言处理】【大模型】GLM-130B&#xff1a;一个开源双语预训练语言模型 【自然语言处理】【大模型】用于大型Transformer的8-bit矩阵乘法介…

第02章_变量与运算符

第02章_变量与运算符 讲师&#xff1a;尚硅谷-宋红康&#xff08;江湖人称&#xff1a;康师傅&#xff09; 官网&#xff1a;http://www.atguigu.com 本章专题与脉络 1. 关键字&#xff08;keyword&#xff09; 定义&#xff1a;被Java语言赋予了特殊含义&#xff0c;用做专门…

银河麒麟服务器ky10 sp3 x86 pgadmin使用

目录 打开网页并登录 连接数据库 备份数据库 还原数据库 打开网页并登录 打开浏览器&#xff0c;输入127.0.0.1:5050&#xff0c;输入用户名和密码登录&#xff0c; 我这边设置的用户名是123456qq.com&#xff0c;密码是 123456 连接数据库 右键选择register-Server 输…

Html5版飞机大战游戏中(Boss战)制作

内容在“60行代码&#xff0c;制作飞机大战游戏”的基础上&#xff0c;继续追加入了Boss战的功能。 boss的血量默认设置为100了&#xff0c;可以二次开发调整……(^_^) 玩起来有一定难度哈。 试玩地址&#xff1a;点击试玩 实现功能 添加玩家飞机&#xff0c;并进行控制Boss能…

vue+MapboxGL:从0 到1 搭建开发环境

本系列教程是在vue2.X的基础上加载mapbox 程序,来开发各种示例程序。 安装顺序 1,下载安装nodejs 下载地址:https://nodejs.org/en/download/ 根据用户自己的机器情况进行选择不同版本的软件下载。 本教程示例采用是是windows 64位系统软件。 安装过程很简单,一路下一步…

vue-router3.0处理页面滚动部分源码分析

在使用vue-router3.0时候&#xff0c;会发现不同的路由之间来回切换&#xff0c;会滚动到上次浏览的位置&#xff0c;今天就来看看这部分的vue-router中的源码实现。 无论是基于hash还是history的路由切换&#xff0c;都对滚动进行了处理&#xff0c;这里分析其中一种即可。 无…

TeeChart Pro ActiveX 2023.3.20 Crack

TeeChart Pro ActiveX 图表组件库提供数百种 2D 和 3D 图形样式、56 种数学和统计函数供您选择&#xff0c;以及无限数量的轴和 14 个工具箱组件。图表控件可以有效地用于创建多任务仪表板。 插件的多功能性 ActiveX 图表控件作为服务器端库中的 Web 图表、脚本化 ASP 图表或桌…

0201概述和结构-索引-MySQL

文章目录1 概述1.1 介绍1.2 优缺点2 索引结构2.1 BTree索引2.2 hash索引2.3 对比3 索引分类3.1 通用分类3.2 InnoDB存储引擎分类4 思考题后记1 概述 1.1 介绍 索引是帮忙MySQL 高效获取数据的数据结构&#xff08;有序&#xff09;。在数据之外&#xff0c;数据系统还维护着满…

【CF1764C】Doremy‘s City Construction(二分图,贪心)

【题目描述】 有nnn个点&#xff0c;每个点的点权为aia_iai​&#xff0c;你可以在任意两个点之间连边&#xff0c;最终连成的图需要满足&#xff1a;不存在任意的三个点&#xff0c;满足au≤av≤awa_u\le a_v\le a_wau​≤av​≤aw​&#xff08;非降序&#xff09;且边(u,v)(…

『pyqt5 从0基础开始项目实战』06. 获取选中多行table 重新初始化数据(保姆级图文)

目录导包和框架代码重新初始化绑定点击事件获取当前选中的所有行id实现初始化数据完整代码main.pythreads.py总结欢迎关注 『pyqt5 从0基础开始项目实战』 专栏&#xff0c;持续更新中 欢迎关注 『pyqt5 从0基础开始项目实战』 专栏&#xff0c;持续更新中 导包和框架代码 请查…

案例分享 | 金融业智能运维AIOps怎么做?看这一篇就够了

​构建双态IT系统&#xff0c;AIOps已经是必然的选择。运维数字化转型已是大势所趋&#xff0c;实体业务的逐步线上化对IT系统的稳定与安全提出更高要求&#xff0c;同时随着双态IT等复杂系统的建立&#xff0c;如何平衡IT运维效率与成本成为区域性银行面临的重要问题&#xff…