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

}

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

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

相关文章

Ubuntu 24.04 LTS 安装Docker

1 更新软件包索引&#xff1a; sudo apt-get update 2 安装必要的软件包&#xff0c;以允许apt通过HTTPS使用仓库&#xff1a; sudo apt-get install apt-transport-https ca-certificates curl software-properties-common 3 添加Docker的官方GPG密钥&#xff1a; curl -fs…

【WEEK14】 【DAY5】Swagger Part 3【English Version】

2024.5.31 Friday Following up on【WEEK14】 【DAY4】Swagger Part 2【English Version】 Contents 16.6. Configure API Groups16.6.1. Modify SwaggerConfig.java16.6.2. Restart 16.7. Entity Configuration16.7.1. Create a new pojo folder16.7.2. Modify HelloControlle…

RDD与Java实战:学生列表,先按性别降序,再按年龄降序排列

文章目录 Scala RDD 实现Java 实现实战总结 在本实战任务中&#xff0c;我们的目标是对学生列表进行排序&#xff0c;排序规则是先按性别降序排列&#xff0c;再按年龄降序排列。我们提供了两种实现方式&#xff1a;使用Scala的RDD&#xff08;弹性分布式数据集&#xff09;和…

牛客网刷题 | BC109 正斜线形图案

目前主要分为三个专栏&#xff0c;后续还会添加&#xff1a; 专栏如下&#xff1a; C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读&#xff01; 初来乍到&#xff0c;如有错误请指出&#xff0c;感谢&#xff01; 描述 KiKi学习了循环&am…

今日好料推荐(这就是会计)

今日好料推荐&#xff08;这就是会计&#xff09; 参考资料在文末获取&#xff0c;关注我&#xff0c;获取优质资源。 这就是会计&#xff1a;资本市场的会计逻辑 是一本由中国会计专家编写的书籍&#xff0c;旨在深入探讨会计在资本市场中的核心作用及其运作逻辑。作为一本…

HTTPS加密

一.加密是什么 加密就是把明文(要传输的信息)进行一系列的变换,生成密文. 有加密就有解密,解密就是把密文进行一系列的变换,生成明文. 在这个加密和解密过程中,往往需要一个或多个中间数据,辅助进行这个过程,这样的数据称为密钥. 加密解密到如今已经发展成了一个独立的学科 : 密…

AtCoder Beginner Contest 356 A~E(F更新中...)

A.Subsegment Reverse 题意 给出三个正整数 N , L , R N, L, R N,L,R。 对于一个序列 A ( 1 , 2 , … , N ) A (1, 2, \ldots, N) A(1,2,…,N)&#xff0c;请你输出翻转了 L ∼ R L \sim R L∼R之间数字后得到的序列。 分析 使用循环进行翻转即可。 代码 #include <…

学工管理系统有什么作用

学生信息办理系统是针对学校学生处的很多作业处理作业而开发的办理软件&#xff0c;首要用于学校学生信息办理&#xff0c;整体使命是完成学生信息联系的体系化、科学化、标准化和自动化&#xff0c;其首要使命是用手机和计算机对学生各种信息进行日常办理&#xff0c;如查询、…

Ubuntu 20.04 LTS配置JDK、Git

一、配置JDK 1.1 更新系统 执行以下命令 sudo apt update 出现以下界面即为安装成功 1.2 安装openjdk-11-jdk Ubuntu20.04中没有默认JDK&#xff0c;执行以下指令安装&#xff0c;默认会自动配置一些必要环境变量 sudo apt install openjdk-11-jdk 1.3 配置环境变量&…

CMake编译安装、生成可执行程序、生成静态动态库以及静态动态库的链接

1 CMake介绍 CMake是一个开源的、跨平台的构建系统&#xff0c;用于管理软件从源代码到可执行文件的整个构建过程。它最初由Kitware公司为ITK&#xff08;Insight Segmentation and Registration Toolkit&#xff09;和VTK&#xff08;Visualization Toolkit&#xff09;等开源…

TimeDao-一篇文章了解清楚Subspace项目

1 项目简介 什么是Subspace网络&#xff1f; Subspace是为下一波加密创建者构建的第四代区块链。旨在实现web3规模扩容。 Subspace允许开发者以互联网规模运行 Web3 应用。它提供了一个简单的接口&#xff0c;用于快速部署按需求自动扩展的多链去中心化应用。Subspace由一个…

Python06 条件判断语句

Python 条件判断语句 Python 条件判断语句格式1if 条件 :else:格式2if 条件 :elif条件 :else:三目: second_max num1 if 条件语句 else num2# 快捷键: tab 整体向右移动一个水平制表符&#xff0c;shift tab 整体向左移动一个水平制表符 num1 10 num2 20 if num2 > num…

每日5题Day15 - LeetCode 71 - 75

每一步向前都是向自己的梦想更近一步&#xff0c;坚持不懈&#xff0c;勇往直前&#xff01; 第一题&#xff1a;71. 简化路径 - 力扣&#xff08;LeetCode&#xff09; class Solution {public String simplifyPath(String path) {Deque<String> stack new LinkedList…

Java17 --- SpringCloud之seate

目录 一、创建seata需要的mysql数据库表 二、修改seata的配置文件 三、启动nacos及seata 四、创建需要的数据库及表 一、创建seata需要的mysql数据库表 CREATE DATABASE seata;CREATE TABLE IF NOT EXISTS global_table(xid VARCHAR(128) NOT NULL,…

电影APP需求规格说明书示范

电影APP需求规格说明书示范 目录结构参考1 引言1.1编写目的1.2背景1.3项目目标1.4 概述 2 整体说明2.1 用例模型2.2 产品功能2.3 用户特点2.4 需求分配 3 具体需求3.1用例描述3.2用例细化 4 支持信息 目录结构参考 计算机软件需求规格说明规范 标准号&#xff1a;GB/T 9385-20…

Jmeter参数化

Jmeter参数化 本质&#xff1a;使用参数的方式来替代脚本中的固定的测试数据 实现方式&#xff1a; 定义变量&#xff08;最基础&#xff09; 文件定义的方式&#xff08;所有测试数据都是固定的情况下&#xff09; 数据库的方式&#xff08;灵活&#xff09; 函数方式&am…

详解 Spark核心编程之广播变量

广播变量是分布式共享只读变量 一、广播变量功能 ​ 广播变量用来将一个较大的数据对象发送到 Executor 并保存在内存中&#xff0c;同一个 Executor 中的所有 Task 都可以读取且只能读取广播变量中的数据&#xff0c;从而达到共享的目的&#xff0c;避免 Executor 中存在大量…

java—MyBatis框架

简介 什么是 MyBatis&#xff1f; MyBatis 是一款优秀的持久层框架&#xff0c;它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO&…

SparkSql近期使用经验分享

背景 近期在公司使用了SparkSql重构一个由Java开发的ETL程序&#xff0c;因为Java模块不易于修改和部署&#xff0c;而由于SparkSql脚本是由Python开发&#xff0c;便于根据业务需求来开发维护&#xff0c;特别是不需要编译、打包部署。 技术理念 SparkSql是以Sql的形式去开…

三十三篇: 解锁决策之门:专家系统深度探索与未来展望

解锁决策之门&#xff1a;专家系统深度探索与未来展望 在今天这个日益复杂的世界中&#xff0c;我们对决策的速度和质量提出了更高的要求。在众多解决方案中&#xff0c;专家系统作为人工智能的一大分支&#xff0c;扮演着不可或缺的角色。它不仅是技术创新的产物&#xff0c;…