【每日刷题】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)

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

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

Minio启动脚本-Windows版

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

如何创建一个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;将镜像源设置为国内镜像源&…

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

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

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;最…

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

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

【U-Net验证】逐元素乘积将特征投射到极高维隐式特征空间的能力

写在前面&#xff1a;本博客仅作记录学习之用&#xff0c;部分图片来自网络&#xff0c;如需使用请注明出处&#xff0c;同时如有侵犯您的权益&#xff0c;请联系删除&#xff01; 文章目录 前言网络结构编码结构解码结构代码 实验实验设置w/o-ReLU的性能比较with-ReLU的性能比…

【Kotlin】简单介绍与使用kotlin

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;Kotlin ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 特点 变量和常量 数据类型和类型推断 函数 字符串模板 条件表达式 空安全 when 表达式 循环 我的其他博客 前言 Kotlin是…

适合技术小白学习的项目1840java swing社团管理系统myeclipse开发Mysql数据库CS结构java编程

一、源码特点 java swing社团管理系统 是一套完善的窗体设计系统&#xff0c;对理解SWING java 编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;&#xff0c;系统主要采用C/S模式开发。 应用技术&#xff1a;javamysql 开发工具&#xff1a;Myecl…

Flutter开发效率提升1000%,Flutter Quick教程之对被遮挡的组件进行编辑

1&#xff0c;有些时候&#xff0c;有的widget会被其他widget所遮挡&#xff0c;那么&#xff0c;我们如何选中被遮挡的Widget?如下面这张图。上面是一个Text&#xff0c;外面包裹着一个Container&#xff0c;这时候点击事件会被Text所拦截&#xff0c;那么&#xff0c;如何选…

零基础画师文创运营变现课,从0基础到入门一步步提升(46节课)

课程下载&#xff1a;零基础画师文创运营变现课&#xff0c;从0基础到入门一步步提升&#xff08;46节课&#xff09;-课程网盘链接提取码下载.txt资源-CSDN文库 更多资源下载&#xff1a;关注我。 课程内容&#xff1a; 01 我的二十五年,mp4 02 古法裁剪与新古法裁剪,mp4 …

动规算法-地下城游戏

在刷题练习专栏中&#xff0c;已经写了两篇文章实现对动态规划入门题目的讲解了&#xff0c;动态规划这类题目很难很好的掌握&#xff0c;今天给大家带来稍微深入的题目&#xff0c;帮助大家更好的理解动态规划的算法思想&#xff0c;加深对该算法的理解&#xff0c;建议看每道…

操作系统|进程和线程的上下文以及他们的上下文切换具体流程?

进程和线程已经是老生常谈的问题了&#xff0c;现在那么他们是如何进行切换的呢&#xff1f;他们之间的切换有什么区别呢&#xff1f;如果你不懂的话&#xff0c;就让我们一起来探讨一下吧&#xff01; 进程上下文切换(context switch) 进程到底由哪些部分组成&#xff1f; …

GPT-4o vs. GPT-4 vs. Gemini 1.5 性能评测,谁更胜一筹!

OpenAI 最近推出了 GPT-4o&#xff0c;OpenAI有一次火爆了&#xff0c;其图像、音频、视频的处理能力非常强。 最令人印象深刻的是&#xff0c;它支持用户与 ChatGPT 实时互动&#xff0c;并且能够处理对话中断。 而且&#xff0c;OpenAI 免费开放了 GPT-4o API 的访问权限。…

finebi或者finereport发邮件

我们二次开发中&#xff0c;如果想利用产品自带的发邮件的功能&#xff0c;来发送自己的邮件内容。 首先 决策系统中邮件相关信息要配置好之后&#xff1a; 这里配好了发件人&#xff0c;以及默认发件人后&#xff0c; private void sendEmail(String content,String subject)…

云计算如何助力金融科技企业实现高效运营

一、引言 随着信息技术的飞速发展,云计算作为一种新兴的计算模式,正在逐渐改变着传统金融行业的运营模式。金融科技企业作为金融行业的重要组成部分,面临着日益增长的业务需求和技术挑战。在这一背景下,云计算凭借其弹性扩展、高可用性、低成本等优势,成为金融科技企业实…