每日总结day22

文章主要讲述了作者在论文返修过程中的格式调整困扰,并详细梳理了算法刷题的内容,包括KMP算法的应用,双指针技巧在解决字符串和链表问题中的实践,以及涉及链表操作的各种问题,如翻转、交换、删除和查找相交节点等。此外,还提及了三数之和的解题思路。
摘要由CSDN通过智能技术生成

昨天论文返修回来啦,马上可以发表啦,可是感觉格式才是最难改的,改了一天还有一些没改完。

目录

一、算法刷题复习

1、KMP算法:

1)实现strStr()

2)重复的子字符串

2、双指针合集

1)翻转字符串里的单词

2)翻转链表

3)两两交换链表中的节点

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

5)链表相交

6)环形链表

7)三数之和,四数之和

二、小论文格式修改


 

一、算法刷题复习

1、KMP算法:

1)实现strStr()

2)重复的子字符串

上述两题的关键思路:求解next数组

1】初始化:左指针j=-1,右指针i=1,next[0]=-1;

2】处理s[j+1] != s[i]的情况(还需要满足j>=0):j持续回退(j=next[j]);

3】处理s[j+1] == s[i]的情况:j++;

4】next数组赋值:next[i] = j;

2、双指针合集

1)翻转字符串里的单词

关键思路: 

        1】去除多余空格(易错点)

      使用扩展双指针法,当fast指向的不为空格,则一直更新s[slow++]=s[fast++](while循环       中),直到遇到空格则停止字符赋值,并手动在单词间添加空格;最后需要重新赋值长度

        2】反转整个字符串

        3】反转单词

2)翻转链表

关键思路:

        定义指针pre与cur,并且在while循环中需要temp记录cur->next节点,更新指针指向位置

3)两两交换链表中的节点

需要创建虚拟头节点 

class Solution {
public:
    ListNode* swapPairs(ListNode* head) {
        ListNode* dummyHead = new ListNode(0); // 设置一个虚拟头结点
        dummyHead->next = head; // 将虚拟头结点指向head,这样方面后面做删除操作
        ListNode* cur = dummyHead;
        while(cur->next != nullptr && cur->next->next != nullptr) {
            ListNode* tmp = cur->next; // 记录临时节点
            ListNode* tmp1 = cur->next->next->next; // 记录临时节点

            cur->next = cur->next->next;    // 步骤一
            cur->next->next = tmp;          // 步骤二
            cur->next->next->next = tmp1;   // 步骤三

            cur = cur->next->next; // cur移动两位,准备下一轮交换
        }
        return dummyHead->next;
    }
};
  • 时间复杂度:O(n)
  • 空间复杂度:O(1)

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

注意:需要添加虚拟头节点(总结链表需要添加虚拟头节点的情况)

关键思路:先让fast指针走N步,然后再让slow与fast同时向后走,直到fast指向末尾,此时slow指向需要删除节点的前一个节点,最后进行删除操作slow->next=slow->next->next。

5)链表相交

注意:由于指针同一时刻只能指向一个地址因此两链表相交只可能在最后几个位置的节点。

关键思路:将两链表末尾对其,将长度较长的链表指针移动到与短链表开头的位置一致的位置,然后逐个将长链表的后面几个节点与短链表节点逐一对比,如果完全一致则说明相交

具体步骤:

简单来说,就是求两个链表交点节点的指针。 这里同学们要注意,交点不是数值相等,而是指针相等。

为了方便举例,假设节点元素数值相等,则节点指针相等。

看如下两个链表,目前curA指向链表A的头结点,curB指向链表B的头结点:

我们求出两个链表的长度,并求出两个链表长度的差值,然后让curA移动到,和curB 末尾对齐的位置,如图:

此时我们就可以比较curA和curB是否相同,如果不相同,同时向后移动curA和curB,如果遇到curA == curB,则找到交点。

否则循环退出返回空指针。

6)环形链表

关键思路:理论推导参考:代码随想录 (programmercarl.com)

7)三数之和,四数之和

三数之和关键思路:(易错点与难点:去重),参考:代码随想录 (programmercarl.com)

class Solution {
public:
    vector<vector<int>> threeSum(vector<int>& nums) {
        vector<vector<int>> res;
        sort(nums.begin(), nums.end());
        for(int i=0; i<nums.size(); i++){
            if(nums[i] > 0){
                return res;
            }
            if(i>0 && nums[i] == nums[i-1]){
                continue;
            }
            // for(int j=i; j<s.size(); j++){
            //     int k = s.size()-1;
            //     if(nums[i]+nums[j]+nums[k] < 0){
            //         j++;
            //     }else if(nums[i]+nums[j]+nums[k] > 0){
            //         k--;
            //     }else{
            //         while(nums[j] == nums[j+1] && j<s.size()) j++;
            //         while(nums[k] == nums[k-1] && k>j) k--;
            //         res.insert(i,j,k);
            //     }
            // }
            int j = i+1;
            int k = nums.size()-1;
            while(j < k){
                if(nums[i]+nums[j]+nums[k] < 0){
                    j++;
                }else if(nums[i]+nums[j]+nums[k] > 0){
                    k--;
                }else{
                    res.push_back(vector<int>{nums[i], nums[j], nums[k]});
                    // 错误写法:注意要先判断j<k否则报错,因为需要想先判断是否满足j<k
                    // while(nums[j] == nums[j+1] && j<k) j++;
                    // while(nums[k] == nums[k-1] && j<k) k--;
                    while(j<k && nums[j] == nums[j+1]) j++;
                    while(j<k && nums[k] == nums[k-1]) k--;
                    j++;
                    k--;
                }
            }
        }
        return res;
    }
};

 四数之和与上述基本一致

二、小论文格式修改

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 通达信是一款常用的股票分析软件,其保存的日线数据文件格式为day文件。而csv文件是一种常见的数据文件格式,可以在不同的软件和工具之间交换和共享数据。 将通达信的day文件转换为csv文件可以通过以下步骤完成: 1. 打开通达信软件,并选择要转换的股票或指数的日线数据。 2. 在通达信软件中找到“导出”或“另存为”等选项,选择将数据导出为文本文件。 3. 在弹出的保存对话框中,选择保存为txt格式,以便后续处理。 4. 使用文本编辑器(如记事本、Sublime Text等)打开保存的txt文件。 5. 检查txt文件的格式,通达信的day文件通常包含日期、开盘价、最高价、最低价、收盘价等信息,每个数据之间用制表符或空格分隔。 6. 检查并调整txt文件的编码,确保其与要求的csv文件编码一致(如UTF-8)。 7. 在文本编辑器中选择“另存为”选项,并将文件格式选择为csv格式。 8. 保存文件,并选择适当的文件名和存储位置。 转换完成后,您就可以使用支持csv文件格式的软件(如Microsoft Excel、Python pandas库等)进行进一步的数据分析、可视化或处理。 需要注意的是,转换过程中可能需要根据具体的数据格式和软件要求进行一些调整和处理,例如处理日期格式、缺失值等。此外,如需处理多只股票或指数的数据,需要对每一个day文件进行转换。 ### 回答2: 通达信day文件是一种历史股票数据文件格式,包含了股票的高、低、开、收、成交量等信息。而CSV文件是一种以逗号分隔值的文本文件,用于储存简单的表格数据。如果想将通达信day文件转换为CSV文件,可以按照以下步骤操作。 首先,需要打开通达信软件,并选择要导出的历史数据。通达信软件提供了数据导出的功能,可以通过菜单或快捷键找到导出选项。 接下来,选择导出文件的路径和名称。通常可以选择将导出的CSV文件保存在本地计算机的某个文件夹中。 然后,在导出选项中选择CSV文件作为导出的文件格式。通常可以在导出选项中看到支持的文件格式,选择CSV文件即可。 最后,点击导出按钮,等待一段时间,通达信软件将会自动将day文件转换为CSV文件,并保存在之前选择的路径中。 转换完成后,可以在保存的路径中找到生成的CSV文件。可以使用文本编辑器或者电子表格软件打开CSV文件,查看其中的股票历史数据,包括日期、开盘价、收盘价、最高价、最低价等。 需要注意的是,不同版本的通达信软件可能略有差异,具体的操作步骤可能会有所不同。如果对于软件操作不熟悉,可以参考软件的帮助文档或者寻求专业人士的帮助。 ### 回答3: 通达信day文件是一种常见的股票数据文件格式,而CSV文件是一种常用的数据存储格式。将通达信day文件转换为CSV文件可以方便地对股票数据进行处理和分析。 通达信day文件通常以“day”为后缀名,包含股票的每日交易数据,如开盘价、收盘价、最高价、最低价、成交量等。而CSV文件以逗号分隔不同的数值,并且可以直接在电子表格软件中打开和编辑。 要进行转换,首先需要打开通达信软件,选择相应的股票数据文件。然后在数据菜单中选择“导出数据”选项,并选择CSV格式。接下来,在弹出的导出设置窗口中,可以选择需要导出的数据类型、导出起止日期等,并点击“确认”按钮。 此时,通达信软件会自动生成相应的CSV文件,保存在指定的路径下。打开生成的CSV文件,可以使用电子表格软件(如Excel)打开和编辑,方便进行数据处理和分析。在CSV文件中,每一行代表一条股票交易数据,各个数据字段以逗号分隔。 总结而言,将通达信day文件转换为CSV文件,可以通过通达信软件进行操作,选择导出数据的格式为CSV,然后软件会自动生成对应的CSV文件,方便进行后续的数据处理和分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值