算法学习——LeetCode力扣补充篇9(912. 排序数组、21. 合并两个有序链表、33. 搜索旋转排序数组、103. 二叉树的锯齿形层序遍历)

news2024/10/7 8:30:23

算法学习——LeetCode力扣补充篇9

在这里插入图片描述

912. 排序数组

912. 排序数组 - 力扣(LeetCode)

描述

给你一个整数数组 nums,请你将该数组升序排列。

示例

示例 1:

输入:nums = [5,2,3,1]
输出:[1,2,3,5]

示例 2:

输入:nums = [5,1,1,2,0,0]
输出:[0,0,1,1,2,5]

提示

1 <= nums.length <= 5 * 104
-5 * 104 <= nums[i] <= 5 * 104

代码解析

冒泡排序
class Solution {
public:
    vector<int> sortArray(vector<int>& nums) {
        for(int i=0 ; i<nums.size() ; i++)
        {
            for(int j=i ; j<nums.size();j++)
            {
                if(nums[i] > nums[j]) swap(nums[i],nums[j]);
            }
        }
        return nums;
    }
};
快速排序
class Solution {
public:
    void quickSort(vector<int>& nums,int left ,int right)
    {
        int mid_value =  nums[left + (right-left)/2] ;
     
        int i= left ;
        int j= right;
        while(i <= j)
        {
            while(nums[i] < mid_value) i++;
            while(nums[j] > mid_value) j--;
            if(i <= j)
            {
                int tmp = nums[j];
                nums[j] = nums[i];
                nums[i] = tmp;
                i++;
                j--;
            }
        }

        if(left < j) quickSort(nums,left,j);
        if(i < right) quickSort(nums,i,right);
    }
    vector<int> sortArray(vector<int>& nums) {
        quickSort(nums,0,nums.size()-1);
        return nums;
    }
};
归序并排
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];
        }
    }
public:
    vector<int> sortArray(vector<int>& nums) {
        tmp.resize((int)nums.size(), 0);
        mergeSort(nums, 0, (int)nums.size() - 1);
        return nums;
    }
};

21. 合并两个有序链表

21. 合并两个有序链表 - 力扣(LeetCode)

描述

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

示例

示例 1:

输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]

示例 2:

输入:l1 = [], l2 = []
输出:[]

示例 3:

输入:l1 = [], l2 = [0]
输出:[0]

提示

两个链表的节点数目范围是 [0, 50]
-100 <= Node.val <= 100
l1 和 l2 均按 非递减顺序 排列

代码解析

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
        ListNode *head = new ListNode;
        ListNode *tmp = head;
        while(list1 != nullptr || list2 != nullptr)
        {
            if((list1 != nullptr && list2 != nullptr && list1->val <= list2->val)
                ||(list1 != nullptr && list2 == nullptr))
            {
                tmp->next = list1;
                tmp = tmp->next;
                list1 = list1->next;
            }

            if((list1 != nullptr && list2 != nullptr && list1->val > list2->val)
                ||(list1 == nullptr && list2 != nullptr))
            {
                tmp->next = list2;
                tmp = tmp->next;
                list2 = list2->next;
            }
        }
        return head->next;
    }
};

33. 搜索旋转排序数组

33. 搜索旋转排序数组 - 力扣(LeetCode)

描述

整数数组 nums 按升序排列,数组中的值 互不相同 。

在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], …, nums[n-1], nums[0], nums[1], …, nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为 [4,5,6,7,0,1,2] 。

给你 旋转后 的数组 nums 和一个整数 target ,如果 nums 中存在这个目标值 target ,则返回它的下标,否则返回 -1 。

你必须设计一个时间复杂度为 O(log n) 的算法解决此问题。

示例

示例 1:

输入:nums = [4,5,6,7,0,1,2], target = 0
输出:4

示例 2:

输入:nums = [4,5,6,7,0,1,2], target = 3
输出:-1

示例 3:

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

提示

1 <= nums.length <= 5000
-104 <= nums[i] <= 104
nums 中的每个值都 独一无二
题目数据保证 nums 在预先未知的某个下标上进行了旋转
-104 <= target <= 104

代码解析

遍历法
class Solution {
public:
    int search(vector<int>& nums, int target) {
        for(int i=0 ; i<nums.size() ;i++)
            if(nums[i] == target) return i;
        return -1;
    }
};
二分查找法
class Solution {
public:
    int find(vector<int>& nums, int target , int left ,int right)
    {
        if(left > right) return -1;
        if(nums[right] > nums[left] && nums[left] > target) return -1;
        else if(nums[right] > nums[left] && nums[right] < target) return -1;

        if(left == right && nums[left] == target) return left;
        else if(left == right && nums[left] != target) return -1;

        int mid = (left+right)/2;
        if(nums[mid] == target) return mid;

        if(left < right)
        {
            int left_value = find(nums,target,left,mid-1);
            int right_value = find(nums,target,mid+1,right);

            if(left_value != -1) return left_value;
            if(right_value != -1) return right_value;
        }
        return -1;
    }
    int search(vector<int>& nums, int target) {
        return find(nums,target,0,nums.size()-1);
    }
};

103. 二叉树的锯齿形层序遍历

103. 二叉树的锯齿形层序遍历 - 力扣(LeetCode)

描述

给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。

示例

示例 1:

输入:root = [3,9,20,null,null,15,7]
输出:[[3],[20,9],[15,7]]

示例 2:

输入:root = [1]
输出:[[1]]

示例 3:

输入:root = []
输出:[]

提示

树中节点数目在范围 [0, 2000] 内
-100 <= Node.val <= 100

代码解析

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    vector<vector<int>> zigzagLevelOrder(TreeNode* root) {
        queue<TreeNode*> my_que;
        vector<vector<int>> result;
        if(root == nullptr) return result;
        bool flag = false;
        my_que.push(root);

        while(my_que.size() != 0)
        {
            int size = my_que.size();
            vector<int> tmp;
            for(int i=0 ; i<size ;i++)
            {
                TreeNode* tmp_node = my_que.front();
                my_que.pop();
                tmp.push_back(tmp_node->val);
                
                if(tmp_node->left != nullptr) my_que.push(tmp_node->left);
                if(tmp_node->right != nullptr) my_que.push(tmp_node->right);
            }
            if(flag == true) reverse(tmp.begin(),tmp.end());
            result.push_back(tmp);
            flag = !flag;
            tmp.clear();
        }
        return result;
    }
};

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

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

相关文章

Qt+vstudio2022的报错信息积累

从今天开始记录一下平常开发工作中的报错记录&#xff0c;后续有错误动态补充&#xff01; 报错信息&#xff1a;【MSB8041】此项目需要 MFC 库。从 Visual Studio 安装程序(单个组件选项卡)为正在使用的任何工具集和体系结构安装它们。 解决&#xff1a; 背景&#xff1a;换…

4个步骤:如何使用 SwiftSoup 和爬虫代理获取网站视频

摘要/导言 在本文中&#xff0c;我们将探讨如何使用 SwiftSoup 库和爬虫代理技术来获取网站上的视频资源。我们将介绍一种简洁、可靠的方法&#xff0c;以及实现这一目标所需的步骤。 背景/引言 随着互联网的迅速发展&#xff0c;爬虫技术在今天的数字世界中扮演着越来越重要…

潮玩宇宙小程序定制大逃杀游戏APP开发H5游戏

游戏名称&#xff1a;潮玩宇宙大逃杀 游戏类型&#xff1a;休闲竞技类小游戏 游戏目标&#xff1a;玩家通过选择房间躲避杀手&#xff0c;生存下来并瓜分被杀房间的元宝。 核心功能 房间选择&#xff1a;玩家进入游戏后&#xff0c;可以选择一间房间躲避杀手。杀手行动&…

十大排序——7.希尔排序

下面我们来看一下希尔排序 目录 1.介绍 2.代码实现 3.总结与思考 1.介绍 希尔排序是插入排序的一种优化&#xff0c;可以理解为是一种分组的插入排序。 希尔排序的要点&#xff1a; 简单来说&#xff0c;就是分组实现插入&#xff0c;每组元素的间隙称为gap&#xff0c;…

文件服务: txt文件预览乱码问题

文章目录 一、背景二、解决方案1、转换流&#xff08;解决代码与文件编码不一致读取乱码的问题&#xff09;2、获取文本文件的字符编码 一、背景 在springboot项目中使用springmvc web.resources的形式进行文件访问。本地上传txt文件编码格式为GB2312(中文简体)&#xff0c;浏…

探索数据结构:BF与KMP的灵活应用

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;数据结构与算法 贝蒂的主页&#xff1a;Betty’s blog 1. 什么是字符串匹配算法 字符串匹配是计算机科学中的一个基础概念&…

超高效空气过滤器(ULPA)在半导体制造领域需求旺盛 滤芯为其重要组成部分

超高效空气过滤器&#xff08;ULPA&#xff09;在半导体制造领域需求旺盛 滤芯为其重要组成部分 超高效空气过滤器&#xff08;ULPA&#xff09;又称超低穿透率空气过滤器&#xff0c;指含有超高效过滤网&#xff0c;对0.1微米粒子捕集效率在99.999%以上的空气过滤器。与高效空…

神经网络压缩图像

简介 典型的压缩管道由四个组件组成&#xff1a; 编码&#xff1a;输入图像 x x x通过编码器函数 ε \varepsilon ε&#xff0c;将其转换为潜在表示 z z z。 量化&#xff1a;截断 z z z以丢弃一些不重要的信息 熵编码&#xff1a;使用某种形式的熵编码&#xff08;例如&…

基于springboot实现信息化在线教学平台设计【项目源码+论文说明】计算机毕业设计

基于springboot实现信息化在线教学平台设计演示 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了信息化在线教学平台的开发全过程。通过分析信息化在线教学平台管理的不足&#xff0c;创建了一个计算机管理信息…

【devops】 阿里云挂载云盘 | 扩展系统硬盘 | 不重启服务器增加硬盘容量

扩容分区和文件系统&#xff08;Linux&#xff09; 文档地址 https://help.aliyun.com/zh/ecs/user-guide/extend-the-partitions-and-file-systems-of-disks-on-a-linux-instance?spm5176.smartservice_service_robot_chat_new.help.dexternal.4ac4f625Ol66kL#50541782adxmp…

SSH KEY 添加

mac&#xff1a; Add SSH KEY公钥 1、 先cd进.ssh文件夹&#xff0c;查看电脑中是否存在之前添加的公钥文件(id_rsa.pub、id_rsa)&#xff0c;要是存在&#xff0c;就先删除: jingchengxindeMacBook-Pro:~ jingchengxin$ cd .ssh jingchengxindeMacBook-Pro:.ssh jingchen…

视频汇聚/安防视频监控云平台EasyCVR云端录像播放与下载的接口调用方法

视频汇聚/安防视频监控云平台EasyCVR支持多协议接入、可分发多格式的视频流&#xff0c;平台支持高清视频的接入、管理、共享&#xff0c;支持7*24小时不间断监控。视频监控管理平台EasyCVR可提供实时远程视频监控、录像、回放与存储、告警、语音对讲、云台控制、平台级联、磁盘…

格瑞纳电子邀您参观2024杭州快递物流展

参展企业介绍 北京格瑞纳电子产品有限公司是一家立足于专业科学技术领域集产品代理、培训咨询和个性化增值服务的高科技公司&#xff0c;于2009年成立于北京&#xff0c;立足于复杂系统仿真领域&#xff0c;主营业务以仿真分析软件产品为中心&#xff0c;提供集产品研发、销售…

学习Rust的第5天:控制流

Control flow, as the name suggests controls the flow of the program, based on a condition. 控制流&#xff0c;顾名思义&#xff0c;根据条件控制程序的流。 If expression If表达式 An if expression is used when you want to execute a block of code if a condition …

华为云CodeArts IDE For Python 快速使用指南

CodeArts IDE 带有 Python 扩展&#xff0c;为 Python 语言提供了广泛的支持。Python 扩展可以利用 CodeArts IDE 的代码补全、验证、调试和单元测试等特性&#xff0c;与多种 Python 解释器协同工作&#xff0c;轻松切换包括虚拟环境和 conda 环境的 Python 环境。本文简要概述…

Java基础_22线程死锁,object类下面线程方法,生产者消费者

周二的回顾 1.线程的概念是进程(应用程序软件)最小的基本单位 2.在Java中代码咋写线程1.继承Thread类2.实现Runnable接口3.实现Callable接口 3.Thread相关的方法4.同步锁目的: 当多个线程操作同一个资源的时候&#xff0c;会发生数据不安全性&#xff01;&#xff01;&#x…

FAOBlue---脂肪酸β-氧化(FAO)活性荧光定量试剂

Funakoshi品牌的FAOBlue是一款可通过荧光成像将活细胞内脂肪酸β-氧化&#xff08;FAO&#xff09;活性可视化的试剂。只需将产品添加到培养基中&#xff0c;即可通过荧光观察定量脂肪酸β-氧化活性。 FAO&#xff08;脂肪酸β-氧化&#xff0c;Fatty acid beta-oxidation&…

LeetCode——965. 单值二叉树

题目- 力扣&#xff08;LeetCode&#xff09; 如果二叉树每个节点都具有相同的值&#xff0c;那么该二叉树就是单值二叉树。 只有给定的树是单值二叉树时&#xff0c;才返回 true&#xff1b;否则返回 false。 示例 1&#xff1a; 输入&#xff1a;[1,1,1,1,1,null,1] 输出&a…

Java工程师常见面试题:Java基础(一)

1、JDK 和 JRE 有什么区别&#xff1f; JDK是Java开发工具包&#xff0c;它包含了JRE和开发工具&#xff08;如javac编译器和java程序运行工具等&#xff09;&#xff0c;主要用于Java程序的开发。而JRE是Java运行环境&#xff0c;它只包含了运行Java程序所必须的环境&#xf…

大创项目推荐 深度学习YOLOv5车辆颜色识别检测 - python opencv

文章目录 1 前言2 实现效果3 CNN卷积神经网络4 Yolov56 数据集处理及模型训练5 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习YOLOv5车辆颜色识别检测 ** 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0…