备赛蓝桥杯--算法题目(1)

1. 链表求和

. - 力扣(LeetCode)

class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        ListNode *head = nullptr, *tail = nullptr;
        int carry = 0;
        while (l1 || l2) {
            int n1 = l1 ? l1->val: 0;
            int n2 = l2 ? l2->val: 0;
            int sum = n1 + n2 + carry;
            if (!head) {
                head = tail = new ListNode(sum % 10);
            } else {
                tail->next = new ListNode(sum % 10);
                tail = tail->next;
            }
            carry = sum / 10;
            if (l1) {
                l1 = l1->next;
            }
            if (l2) {
                l2 = l2->next;
            }
        }
        if (carry > 0) {
            tail->next = new ListNode(carry);
        }
        return head;
    }
};
2. 分割链表 

. - 力扣(LeetCode)

class Solution {
public:
    ListNode* partition(ListNode* head, int x) {
        ListNode* shead=new ListNode;
        ListNode* srear=shead;
        ListNode* bhead=new ListNode;
        ListNode* brear=bhead;
        ListNode* tmp=head;
        while(tmp)
        {
            if((tmp->val)>=x)
            {
                if(bhead==nullptr)
                {
                    bhead=brear=tmp;
                }
                else{
                    brear->next=tmp;
                    brear=brear->next;
                }
            }
            else{
                if(shead==nullptr)
                {
                    shead=srear=tmp;
                }
                else{
                    srear->next=tmp;
                    srear=srear->next;
                }
            }
            tmp=tmp->next;
        }
        brear->next=nullptr;
        srear->next=bhead->next;
        return shead->next;
    }
};
3. 最小栈

. - 力扣(LeetCode)

class MinStack {
public:
    /** initialize your data structure here. */
    MinStack() {
        s1=new stack<int>;
        s2=new stack<int>;
    }
    
    void push(int x) {
        s1->push(x);
        if(s2->empty())
        {
            s2->push(x);
        }
        else{
            if(x<=s2->top())
            {
                s2->push(x);
            }
        }
    }
    
    void pop() {
        if(s1->top()==s2->top())
        {
            s2->pop();
        }
        s1->pop();
    }
    
    int top() {
        return s1->top();
    }
    
    int getMin() {
        return s2->top();
    }
private:
    stack<int>* s1;
    stack<int>* s2;
};
4. 二叉树的前序,中序,后序遍历

. - 力扣(LeetCode)

#include<stack>
class Solution {
public:
    vector<int> preorderTraversal(TreeNode* root) {
        vector<int> tmp;
       if(root!=nullptr)
       {
            TreeNode* head=root;
            stack<TreeNode*> s;
            s.push(head);
            while(!s.empty())
            {
                head=s.top();
                tmp.push_back(head->val);
                s.pop();
                if(head->right!=nullptr)
                {
                    s.push(head->right);
                }
                if(head->left!=nullptr)
                {
                    s.push(head->left);
                }
            }
       }
       return tmp;
    }
};

. - 力扣(LeetCode)

class Solution {
public:
    vector<int> inorderTraversal(TreeNode* root) {
        vector<int> tmp;
        stack<TreeNode*> s;
        TreeNode* head=root;
        while(!s.empty()||head!=nullptr)
        {
            while(head!=nullptr)
            {
                s.push(head);
                head=head->left;
            }
            head=s.top();
            tmp.push_back(head->val);
            s.pop();
            head=head->right;
        }
        return tmp;
    }
};

. - 力扣(LeetCode)

class Solution {
public:
    vector<int> postorderTraversal(TreeNode* root) {
        vector<int> tmp;
        stack<TreeNode*> s;
        TreeNode* head=root;
        TreeNode* ptr=root;
        while(!s.empty()||head!=nullptr)
        {
            while(head!=nullptr)
            {
                s.push(head);
                head=head->left;
            }
            head=s.top();
            s.pop();
            if(head->right==nullptr||head->right==ptr)
            {
                tmp.push_back(head->val);
                ptr=head;
                head=nullptr;
            }
            else{
                s.push(head);
                head=head->right;
            }
        }
        return tmp;
    }
};
5. 设计循环队列

. - 力扣(LeetCode)

class MyCircularQueue {
private:
    int front;
    int rear;
    int capacity;
    vector<int> elements;

public:
    MyCircularQueue(int k) {
        this->capacity = k + 1;
        this->elements = vector<int>(capacity);
        rear = front = 0;
    }

    bool enQueue(int value) {
        if (isFull()) {
            return false;
        }
        elements[rear] = value;
        rear = (rear + 1) % capacity;
        return true;
    }

    bool deQueue() {
        if (isEmpty()) {
            return false;
        }
        front = (front + 1) % capacity;
        return true;
    }

    int Front() {
        if (isEmpty()) {
            return -1;
        }
        return elements[front];
    }

    int Rear() {
        if (isEmpty()) {
            return -1;
        }
        return elements[(rear - 1 + capacity) % capacity];
    }

    bool isEmpty() {
        return rear == front;
    }

    bool isFull() {
        return ((rear + 1) % capacity) == front;
    }
};
6. 排序数组

. - 力扣(LeetCode)

static int first,last;
class Solution {
    vector<int> tmp;
    void mergeSort(vector<int>& nums, int l, int r) {
        if (l >= r) return;
        int mid = (l + r) >> 1;
        mergeSort(nums, l, mid);
        mergeSort(nums, mid + 1, r);
        int i = l, j = mid + 1;
        int cnt = 0;
        while (i <= mid && j <= r) {
            if (nums[i] <= nums[j]) {
                tmp[cnt++] = nums[i++];
            }
            else {
                tmp[cnt++] = nums[j++];
            }
        }
        while (i <= mid) {
            tmp[cnt++] = nums[i++];
        }
        while (j <= r) {
            tmp[cnt++] = nums[j++];
        }
        for (int i = 0; i < r - l + 1; ++i) {
            nums[i + l] = tmp[i];
        }
    }

    void randomized_quicksort(vector<int>& nums, int l, int r) {
        if (l < r) {
            int j = rand() % (r - l + 1) + l;
            first=l,last=r;
            int i=l,x=nums[j];
        while(i<=last)
        {
            if(nums[i]==x)
            {
                i++;
            }
            else if(nums[i]<x)
            {
                swap(nums[first++],nums[i++]);
            }
            else{
                swap(nums[last--],nums[i]);
            }
        }
            int left=first,right=last;
            randomized_quicksort(nums, l, left - 1);
            randomized_quicksort(nums, right + 1, r);
        }
    }
public:
    vector<int> sortArray(vector<int>& nums) {
        srand((unsigned)time(NULL));
        tmp.resize((int)nums.size(), 0);
        //mergeSort(nums, 0, (int)nums.size() - 1);
        randomized_quicksort(nums,0,(int)nums.size() - 1);
        return nums;
    }
};
7. 求数组第k个最大元素

. - 力扣(LeetCode)

static int first,last;
class Solution {
public:
    int findKthLargest(vector<int>& nums, int k) {
        int m=nums.size()-k;
        srand((unsigned)time(NULL));
        return test(nums,m);
    }

    int test(vector<int>& nums,int i)
    {
        int ans = 0;
		for (int l = 0, r =nums.size() - 1; l <= r;) {
			partition(nums, l, r, nums[l + rand()%(r-l+1)]);
			if (i < first) {
				r = first - 1;
			} else if (i > last) {
				l = last + 1;
			} else {
				ans = nums[i];
				break;
			}
		}
		return ans;
    }

	void partition(vector<int>& nums, int l, int r, int x) {
		first = l;
		last = r;
		int i = l;
		while (i <= last) {
			if (nums[i] == x) {
				i++;
			} else if (nums[i] < x) {
				swap(nums[first++],nums[i++]);
			} else {
				swap(nums[last--],nums[i]);
			}
		}
	}
};

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Unity Dots下的动画合批工具:GPU ECS Animation Baker

书接上文&#xff0c;为了实现大批量物体的生成&#xff0c;我们准备使用Unity最新的dots系统&#xff0c;在该系统下找到了动画解决方案&#xff1a;GPU ECS Animation Baker。 导入的同时&#xff0c;也需要导入以下两个插件&#xff0c;否则会提示报错&#xff1a; PS&…

windows上部署flask程序

文章目录 前言一、准备工作二、配置 Gunicorn 或 uWSGI1.安装 Waitress2.修改启动文件来使用 Waitress 启动 Flask 应用3.配置反向代理&#xff08;可选&#xff09;4.启动程序访问 三.Flask 程序在 Windows 启动时自动启动1.使用 nssm&#xff08;Non-Sucking Service Manager…

共享单车管理系统项目学习实战

前言 Spring Boot Vue前后端分离 前端&#xff1a;Vue&#xff08;CDN&#xff09; Element axios(前后端交互) BaiDuMap ECharts(图表展示) 后端&#xff1a;Spring Boot Spring MVC(Web) MyBatis Plus(数据库) 数据库:MySQL 验证码请求

python中Pandas操作excel补全内容

补全ID、InStore、Date import random from datetime import datetime, timedeltaimport pandas as pdfile_path r"C:\Users\xb\Desktop\Books_1.xlsx" books pd.read_excel(iofile_path, skiprows3, usecols"C:F", dtype{"ID": str, "I…

40分钟学 Go 语言高并发:Goroutine基础与原理

Day 03 - goroutine基础与原理 1. goroutine创建和调度 1.1 goroutine基本特性 特性说明轻量级初始栈大小仅2KB&#xff0c;可动态增长调度方式协作式调度&#xff0c;由Go运行时管理创建成本创建成本很低&#xff0c;可同时运行数十万个通信方式通过channel进行通信&#x…

Python学习------第十天

数据容器-----元组 定义格式&#xff0c;特点&#xff0c;相关操作 元组一旦定义&#xff0c;就无法修改 元组内只有一个数据&#xff0c;后面必须加逗号 """ #元组 (1,"hello",True) #定义元组 t1 (1,"hello") t2 () t3 tuple() prin…

nwjs崩溃复现、 nwjs-控制台手动操纵、nwjs崩溃调用栈解码、剪切板例子中、nwjs混合模式、xdotool显示nwjs所有进程窗口列表

-1. nwjs在低版本ubuntu运行情况 ubuntu16.04运行nw-v0.93或0.89报错找不到NSS_3.30、GLIBC_2.25 uname -a #Linux Asus 4.15.0-112-generic #113~16.04.1-Ubuntu SMP Fri Jul 10 04:37:08 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux cat /etc/issue #Ubuntu 16.04.7 LTS \n \l…

在自动驾驶进行大数据量因果推理实验时,如何减少无用功,提高实验效率?

在对实验结果做反事实推理时&#xff0c;通常需要对数据进行多次循环&#xff0c;然后对多次循环的结果进行处理&#xff0c;如果只在最后结果结束时&#xff0c;再进行处理&#xff0c;可能会由于反事实过程中某个参数设置错误&#xff0c;导致整个反事实实验出现错误&#xf…

DAY1 网络编程(TCP客户端服务器)

作业&#xff1a; TCP客户端服务器。 server服务器代码&#xff1a; #include <myhead.h> #define IP "192.168.110.52" #define PORT 8886 #define BACKLOG 20 int main(int argc, const char *argv[]) {int oldfdsocket(AF_INET,SOCK_STREAM,0);//IPV4通信…

Kafka怎么发送JAVA对象并在消费者端解析出JAVA对象--示例

1、在pom.xml中加入依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-stream-kafka</artifactId><version>3.1.6</version></dependency> 2、配置application.yml 加入Kafk…

【SQL实验】视图操作(菜单操作和命令操作)

完整代码在文章末尾【代码是自己的解答&#xff0c;并非标准答案&#xff0c;也有可能写错&#xff0c;文中可能会有不准确或待完善之处&#xff0c;恳请各位读者不吝批评指正&#xff0c;共同促进学习交流】 &#xff08;一&#xff09;菜单操作 1.建立视图“课程”&#xff…

python基础知识(七)——写入excel

一、写入excel 写入数据到excel wb load_workbook("testcase_api_wuye.xlsx") #打开一个已经存在的excel文件 sh wb["register"] #识别某一个表单 sh.cell(row 2,column 8).value "pass" #写入数据&#xff0c;单元格的值赋值 wb.sav…

MATLAB绘图基础11:3D图形绘制

参考书&#xff1a;《 M A T L A B {\rm MATLAB} MATLAB与学术图表绘制》(关东升)。 11.3D图形绘制 11.1 3D图概述 M A T L A B {\rm MATLAB} MATLAB的 3 D {\rm 3D} 3D图主要有&#xff1a; 3 D {\rm 3D} 3D散点图、 3 D {\rm 3D} 3D线图、 3 D {\rm 3D} 3D曲面图、 3 D {\rm…

ssm148基于Spring MVC框架的在线电影评价系统设计与实现+jsp(论文+源码)_kaic

毕 业 设 计&#xff08;论 文&#xff09; 题目&#xff1a;在线电影评价系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本在线电影评价系…

激光slam学习笔记5---ubuntu2004部署运行fastlivo踩坑记录

背景&#xff1a;看看fastlivo论文&#xff0c;觉得挺有意思的&#xff0c;就本地部署跑跑看看效果。个人环境&#xff0c;ubuntu20.04。 一、概要 由于依赖比较多&#xff0c;个人构建工作空间&#xff0c;使用catkin_make编译 src├── FAST-LIVO├── livox_ros_driver…

12. 利用“文件组织”实现石头剪刀布小游戏

文章目录 概要整体架构流程技术名词解释小结 1. 概要 ~ Jack Qiao对米粒说&#xff1a;“前面咱们了解过“文件组织”&#xff0c;让我们利用“文件组织”来制作一个有趣的“石头、剪刀、布”小游戏。”举个栗子&#xff1a; > 程序随机生成一个选择&#xff08;石头、剪刀…

VRT: 关于视频修复的模型

VRT: 关于视频修复的模型 1. 视频修复的背景与重要性背景介绍&#xff1a;重要性&#xff1a; 2. VRT的重要性和研究背景VRT的背景&#xff1a;VRT的重要性&#xff1a; 3. 视频修复概述3.1 定义与目标3.2 与单图像修复的区别3.3 对时间信息利用的需求 4. VRT模型详解4.1 整体框…

Stable Diffusion经典应用场景

&#x1f33a;系列文章推荐&#x1f33a; 扩散模型系列文章正在持续的更新&#xff0c;更新节奏如下&#xff0c;先更新SD模型讲解&#xff0c;再更新相关的微调方法文章&#xff0c;敬请期待&#xff01;&#xff01;&#xff01;&#xff08;本文及其之前的文章均已更新&…

04 —— Webpack打包CSS代码

加载器css-loader &#xff1a;解析css代码 webpack 中文文档 | webpack中文文档 | webpack中文网 加载器style-loader&#xff1a;把解析后的css代码插入到DOM style-loader | webpack 中文文档 | webpack中文文档 | webpack中文网 准备css代码&#xff0c;放到src/login目…

springboot高校网上缴费综合务系统

摘 要 相比于以前的传统手工管理方式&#xff0c;智能化的管理方式可以大幅降低运营人员成本&#xff0c;实现了高校网上缴费综合务系统的标准化、制度化、程序化的管理&#xff0c;有效地防止了高校网上缴费综合务的随意管理&#xff0c;提高了信息的处理速度和精确度&#x…