【每日刷题】Day54

【每日刷题】Day54

🥕个人主页:开敲🍉

🔥所属专栏:每日刷题🍍

🌼文章目录🌼

1. 575. 分糖果 - 力扣(LeetCode)

2. 147. 对链表进行插入排序 - 力扣(LeetCode)

3. 137. 只出现一次的数字 II - 力扣(LeetCode)

1. 575. 分糖果 - 力扣(LeetCode)

//思路:哈希表。维护一个哈希表,由于给定数组中的元素可能为负数,因此需要对哈希表的键进行改良。

int distributeCandies(int* candyType, int candyTypeSize)

{

    int count = candyTypeSize/2;

    int hash[200001] = {0};//题目所给数在 -10^5~10^5,因此我们将所有负数加上10^5

    for(int i = 0;i<candyTypeSize;i++)

    {

        hash[candyType[i]+100000]+=1;

    }

    int ans = 0;

    for(int i = 0;i<200001;i++)

    {

        if(hash[i]>0)

            ans++;

    }

    if(ans<count)

        return ans;

    return count;

}

2. 147. 对链表进行插入排序 - 力扣(LeetCode)

//思路:插入排序。对链表插入排序十分困难,因此我们可以将链表存储进数组,对数组进行插入排序,再将数组转换为链表。

typedef struct ListNode LN;


 

//插入排序

void InsertSort(int* arr,int size)

{

    for (int i = 0; i < size-1; i++)

    {

        int end = i + 1;

        int tmp = arr[end];

        while (end - 1 >= 0)

        {

            if (tmp < arr[end - 1])

            {

                arr[end] = arr[end - 1];

            }

            else

            {

                break;

            }

            end--;

        }

        arr[end] = tmp;

    }

}

struct ListNode* insertionSortList(struct ListNode* head)

{

    int arr[5001] = {0};

    LN* pmove = head;

    int count = 0;

    while(pmove)//链表转数组

    {

        arr[count++] = pmove->val;

        pmove = pmove->next;

    }

    InsertSort(arr,count);//插入排序

    LN* newhead = (LN*)malloc(sizeof(LN));

    LN* Sentry = newhead;

    for(int i = 0;i<count;i++)//数组转链表

    {

        LN* newnode = (LN*)malloc(sizeof(LN));

        newnode->next = NULL;

        newnode->val = arr[i];

        newhead->next = newnode;

        newhead = newhead->next;

    }

    return Sentry->next;

}

3. 137. 只出现一次的数字 II - 力扣(LeetCode)

//思路:排序。对原数组进行排序。只有一个元素出现一次,其余元素均出现三次,因此我们对排序后的数组遍历,出现三次的元素一定是相邻的。如果相邻的两个元素相同,则i+=3继续向后遍历;否则,只出现一次的元素一定是当前i下标的元素。本题采用的快排为自行实现。

//交换

void Swap(int* x, int* y)

{

    int tmp = *x;

    *x = *y;

    *y = tmp;

}


 

//三数取中

int GetMid(int* arr,int left, int right)

{

    int mid = (left + right) / 2;

    if (arr[left] > arr[right])

    {

        if (arr[mid] > arr[left])

        {

            return left;

        }

        else if (arr[right] > arr[mid])

        {

            return right;

        }

        else

        {

            return mid;

        }

    }

    else

    {

        if (arr[right] < arr[mid])

        {

            return right;

        }

        else if (arr[mid] > arr[left])

        {

            return mid;

        }

        else

        {

            return left;

        }

    }

}


 

//插入排序

void InsertSort(int* arr,int size)

{

    for (int i = 0; i < size-1; i++)

    {

        int end = i + 1;

        int tmp = arr[end];

        while (end - 1 >= 0)

        {

            if (tmp < arr[end - 1])

            {

                arr[end] = arr[end - 1];

            }

            else

            {

                break;

            }

            end--;

        }

        arr[end] = tmp;

    }

}


 

//快速排序

void QuickSort(int* arr,int left,int right)

{

    if (left >= right)

        return;

    //小区间优化

    if ((right - left + 1) < 10)

    {

        InsertSort(arr + left, right - left + 1);

    }

    else

    {

        //三数取中优化

        int mid = GetMid(arr, left, right);

        Swap(&arr[mid], &arr[left]);

        int key = left;

        int begin = left;

        int end = right;

        while (begin < end)

        {

            while (begin < end && arr[end] >= arr[key])

            {

                end--;

            }

            while (begin < end && arr[begin] <= arr[key])

            {

                begin++;

            }

            Swap(&arr[begin], &arr[end]);

        }

        Swap(&arr[begin], &arr[key]);//相遇后与key交换

        key = begin;

        QuickSort(arr, left, key - 1);

        QuickSort(arr, key + 1, right);

    }

}


 

int singleNumber(int* nums, int numsSize)

{

    QuickSort(nums,0,numsSize-1);

    int i = 0;

    for(;i<numsSize-1;i+=3)

    {

        if(nums[i]!=nums[i+1])

            return nums[i];

    }

    return nums[i];

}

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

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

相关文章

多源 BFS 详解

目录 一、多源与单源的区别 二、例题练习 2.1 例题1&#xff1a;01 矩阵 2.2 例题2&#xff1a;飞地的数量 2.3 例题3&#xff1a;地图中的最高点 2.4 例题4&#xff1a;地图分析 一、多源与单源的区别 单源最短路问题如何解决已经在上篇博客给出BFS 解决最短路问题&am…

最新版ERP进销存网络多仓版WEB源码

安装说明 环境要求&#xff1a; PHP5.6MYSQL5.6 1.恢复数据库.sql数据 2.配置sql参数连接路径&#xff1a;application\config\database.php 3.前台登录用户名&#xff1a;admin 密码&#xff1a;admin 源码免费下载地址抄笔记 (chaobiji.cn)

Spring Data JPA与Hibernate的关系是什么?

Spring Data JPA 和 Hibernate 的关系可以用术语“抽象层”和“实现”来描述。在这种关系中&#xff0c;Spring Data JPA 表现为一个更高级别的抽象层&#xff0c;而 Hibernate 是这一层下面的一个具体实现。 Hibernate Hibernate 是一个非常流行的 Java 持久化框架。它提供了…

解决sd-webui中rembg插件使用报错问题

stable-diffusion-webui-rembg是我非常喜欢的sd-webui插件&#xff0c;PS抠图手残党的福音&#xff0c;一键抠图太爽啦。对于主体明确线条简单的图片&#xff08;如汽车、服饰简洁的人像等&#xff09;效果相当好&#xff1b;即便对于毛茸茸的对象&#xff08;如动物&#xff0…

C语言选择排序编程:深入剖析与实战指南

C语言选择排序编程&#xff1a;深入剖析与实战指南 在C语言编程中&#xff0c;选择排序是一种简单直观的排序算法。本文将通过四个方面、五个方面、六个方面和七个方面&#xff0c;深入剖析选择排序的原理、实现过程以及注意事项&#xff0c;帮助读者更好地掌握这一算法&#…

Elasticsearch安装与配置:快速搭建本地环境

Elasticsearch&#xff0c;作为当下最流行的开源搜索引擎和数据分析工具之一&#xff0c;其强大的全文搜索能力和丰富的数据分析功能&#xff0c;吸引了众多开发者和数据分析师的关注。本文将指导你如何快速在本地搭建Elasticsearch环境&#xff0c;以便你能够立即开始探索其强…

编译器屏障概述

文章目录 1. 前言2. 编译器内存屏障2.1 编译器内存访问重排序规则2.2 编译器屏障的几种形式2.2.1 显式编译器屏障2.2.2 隐式编译器屏障2.2.3 硬件内存屏障充当编译屏障2.2.4 编程语言内存模型提供的编译屏障 2.3 编译器内存屏障实例2.3.1 Linux spinlock 3. 结语4. 参考资料 1.…

Minio启动脚本-Windows版

MinIO 是一种高性能、S3 兼容的对象存储。 它专为大规模 AI/ML、数据湖和数据库工作负载而构建,并且它是由软件定义的存储。 不需要购买任何专有硬件,就可以在云上和普通硬件上拥有分布式对象存储。 MinIO拥有开源 GNU AGPL v3 和商业企业许可证的双重许可。 ——摘自…

MySQL之创建高性能的索引(十二)

创建高性能的索引 支持多种过滤条件 这些索引将满足大部分最常见的搜索查询&#xff0c;但是如何为一些生僻的搜索条件(比如has_pictures、eye_color、hair_colr和education)来设计索引呢&#xff1f;这些列的选择性搞&#xff0c;使用也不频繁&#xff0c;可以选择忽略它们&…

云计算和雾计算

雾计算作为传统集中式数据存储系统&#xff08;云&#xff09;和边缘设备之间的中间层。雾扩展了云&#xff0c;使计算和数据存储更接近边缘。雾由多个节点&#xff08;雾节点&#xff09;组成&#xff0c;并创建一个本地网络&#xff0c;使其成为一个去中心化的生态系统——雾…

如何创建一个Angular项目(超简单)

1、安装Node.js&#xff08;官网Node.js下载&#xff09; 2、运行node -v和npm -v两条命令&#xff08;检验是否下载成功Node.js&#xff09; 3、npm i -g cnpm --registryhttps://registry.npmmirror.com&#xff08;用npm安装cnpm&#xff0c;将镜像源设置为国内镜像源&…

ROS2 (python)构造服务端和客户端

要注意&#xff1a;服务端和客户端的名字要统一 什么是线程死锁 A需要等B把装满水的桶放下 才能把水桶提走 B需要等A把水桶提走才能把自己的装满 假设A和B都要站在位置C工作 A&#xff1a;站在工位C将小桶水倒进大桶里 B&#xff1a;从C位置将装满水的大桶拎走 那么假设时刻…

Next前端是什么

Next前端是什么 在前端开发的浩瀚星空中&#xff0c;Next前端如同一颗璀璨的明星&#xff0c;吸引着无数开发者的目光。那么&#xff0c;Next前端究竟是什么呢&#xff1f;它为何能在前端领域掀起如此波澜&#xff1f;接下来&#xff0c;我们将从四个方面、五个方面、六个方面…

制作一个简单HTML旅游网站(HTML+CSS+JS)云南旅游网页设计与实现5个页面

一、&#x1f468;‍&#x1f393;网站题目 旅游&#xff0c;当地特色&#xff0c;历史文化&#xff0c;特色小吃等网站的设计与制作。 二、✍️网站描述 云南旅游主题的网页 一共七个个页面 - 旅游网页使用html css js制作 有banana图 - 页面可以相互跳转 包含表单 三级页面…

Laravel 富文本内容

Laravel 获取富文本的纯文本内容-CSDN博客 Laravel 富文本内容里面的图片添加前缀URL-CSDN博客 Laravel 富文本图片的style样式删除-CSDN博客. 富文本字体font-famly删除 $data preg_replace(/(<[^>])style["\][^"\]*font-family:[^"\]*["\]([^&…

Shopee爆款打造核心运营方法,下一个大卖就是你

课程下载&#xff1a;Shopee爆款打造核心运营方法&#xff0c;下一个大卖就是你-课程网盘链接提取码下载.txt资源-CSDN文库 更多资源下载&#xff1a;关注我。 课程内容&#xff1a; 001.1-爆款产品的选择,mp4 002.2-依据宗教信仰和消费禁忌选品.mp4 003.3-刻画消费者画像…

C++设计模式-桥接模式

运行在VS2022&#xff0c;x86&#xff0c;Debug下。 29. 桥接模式 桥接模式将抽象与实现分离&#xff0c;使二者可以独立地变化。 应用&#xff1a;如在游戏开发中&#xff0c;多个角色和多个武器交叉组合时。可以使用桥接模式&#xff0c;定义角色抽象类&#xff0c;武器抽象…

如何跨渠道分析销售数据 - 7年制造业销售经验小结

如何跨渠道分析销售数据 - 7年制造业销售经验小结&#xff08;1&#xff09; 【前言】 在我过去7年销售工作生涯中&#xff0c;从第一年成为公司销冠后&#xff0c;我当时的确自满的一段时间&#xff0c;认为自己很了不起。但是第一年的销售业绩并没有拿到提成&#xff0c;最…

2024-06-02 问AI: 在大语言模型中,什么是multi agent?

文心一言 在大语言模型中&#xff0c;Multi-Agent&#xff08;多智能体&#xff09;是指由多个具有自主决策和交互能力的智能体&#xff08;Agent&#xff09;组成的系统。这些智能体能够相互协作、竞争或协商&#xff0c;以完成共同或各自的任务。以下是关于Multi-Agent在大语…

爱情的短视频短片:四川京之华锦信息技术公司

爱情的短视频短片&#xff1a;情感瞬间的浓缩与绽放 在数字化时代&#xff0c;短视频以其短小精悍、直击人心的特点&#xff0c;迅速占领了互联网的高地。而在这些纷繁复杂的短视频内容中&#xff0c;关于爱情的短视频短片更是以其独特的魅力&#xff0c;吸引了无数观众的目光…