力扣奇遇记 [第一章]

news2024/11/25 15:31:11

文章目录

  • 😦第一题:拿下LeetCode1769. 移动所有球到每个盒子所需的最小操作数
    • 学习内容:LeetCode1769. 移动所有球到每个盒子所需的最小操作数
    • 🙈思路分析:
    • 💖代码产出:
  • 😦第二题:拿下2089. 找出数组排序后的目标下标
    • 学习内容: 拿下2089. 找出数组排序后的目标下标
    • 🙈思路分析:
    • 💖代码产出:


😦第一题:拿下LeetCode1769. 移动所有球到每个盒子所需的最小操作数

  • 😤 学完本章节知识即可掌握本题!

学习内容:LeetCode1769. 移动所有球到每个盒子所需的最小操作数

😤题目

有 n 个盒子。给你一个长度为 n 的二进制字符串 boxes ,其中 boxes[i] 的值为 ‘0’ 表示第 i 个盒子是 空 的,而 boxes[i] 的值为 ‘1’ 表示盒子里有 一个 小球。
在一步操作中,你可以将 一个 小球从某个盒子移动到一个与之相邻的盒子中。第 i 个盒子和第 j 个盒子相邻需满足 abs(i - j) == 1 。注意,操作执行后,某些盒子中可能会存在不止一个小球。
返回一个长度为 n 的数组 answer ,其中 answer[i] 是将所有小球移动到第 i 个盒子所需的 最小 操作数。
每个 answer[i] 都需要根据盒子的 初始状态 进行计算。


示例1

输入:boxes = “110”
输出:[1,1,3]
解释:每个盒子对应的最小操作数如下:

  1. 第 1 个盒子:将一个小球从第 2 个盒子移动到第 1 个盒子,需要 1 步操作。
  2. 第 2 个盒子:将一个小球从第 1 个盒子移动到第 2 个盒子,需要 1 步操作。
  3. 第 3 个盒子:将一个小球从第 1 个盒子移动到第 3 个盒子,需要 2 步操作。将一个小球从第 2 个盒子移动到第 3 个盒子,需要 1 步操作。共计 3 步操作。

示例2

输入:boxes = “001011”
输出:[11,8,5,4,3,4]


🙈思路分析:

根据本题目的描述,我想到一种很暴力的方法,在这一题中这道力扣题目处于中等题,但是却可以用我这种暴力法解开我觉得有点意外hhh!

时间复杂度 O(N^2)
空间复杂度 O(N)

我们先来看示例1,这里我采用的是两层for循环大法,第一层for用来遍历固定的箱子,因为在题目的示例中我们发现在每一个位置上都需要有球进去所以第一层我们确定用来定义稳定的球数,然后我们根据题目还可以知道只有位置上有1才需要把球移动过去,所以我们第二层for用来判断当前位置是否为1,这里我们还需要利用一个函数叫abs函数,它的作用是相当于绝对值的作用。

在这里插入图片描述

💖此时我们就可以开始编写代码啦!但是这里我们要注意在LeetCode刷题都属于是接口型函数,所以我们呢不用去管那些函数的调用去包那些头文件,


💖代码产出:

int* minOperations(char * boxes, int* returnSize){
    int len = strlen(boxes);
    *returnSize = len;
    int sum = 0;
    int* answer = (int*)malloc(sizeof(int) * (*returnSize));
    for(int i = 0;boxes[i] != '\0';i++)
    {
        sum = 0;
        for(int j = 0;boxes[j] != '\0';j++)
        {
            if((boxes[j] - '0') == 1)
            {
                sum += abs(j - i);
            }
        }
        answer[i] = sum;
    }
    return answer;
}

😦第二题:拿下2089. 找出数组排序后的目标下标

  • 😤 学完本章节知识即可掌握本题!

学习内容: 拿下2089. 找出数组排序后的目标下标

😤题目

给你一个下标从 0 开始的整数数组 nums 以及一个目标元素 target
目标下标 是一个满足 nums[i] == target 的下标 i 。
nums 按 非递减 顺序排序后,返回由 nums 中目标下标组成的列表。如果不存在目标下标,返回一个 空 列表。返回的列表必须按 递增 顺序排列。


示例1

输入:nums = [1,2,5,2,3], target = 2
输出:[1,2]
解释:排序后,nums 变为 [1,2,2,3,5] 。
满足 nums[i] == 2 的下标是 1 和 2 。

示例2

输入:nums = [1,2,5,2,3], target = 3
输出:[3]
解释:排序后,nums 变为 [1,2,2,3,5] 。
满足 nums[i] == 3 的下标是 3 。

示例3

输入:nums = [1,2,5,2,3], target = 5
输出:[4]
解释:排序后,nums 变为 [1,2,2,3,5] 。
满足 nums[i] == 5 的下标是 4 。

示例4

输入:nums = [1,2,5,2,3], target = 4
输出:[]
解释:nums 中不含值为 4 的元素。


🙈思路分析:

根据本题目的描述,我先想到的是利用c语言里面的qsort库函数,先快速排序一下,此时的数组就是有序的了。之后在一次遍历找到下标即可

时间复杂度 O(N)
空间复杂度 O(N)

我们先来看示例1,这里先是利用排序把数组排成了升序,第一个for循环是先找到数组中与target相同的数有几个,然后在进行动态开辟数组,第二个for循环就是依次把与target相同数的下标放进ret数组中,最后在返回ret即可

在这里插入图片描述

💖此时我们就可以开始编写代码啦!但是这里我们要注意在LeetCode刷题都属于是接口型函数,所以我们呢不用去管那些函数的调用去包那些头文件,


💖代码产出:

int compare(const void* a,const void* b)
{
    return *(int*)a - *(int*)b;
}
int* targetIndices(int* nums, int numsSize, int target, int* returnSize){
    int ans = 0;
    qsort(nums,numsSize,sizeof(int),compare);
    for(int i = 0;i < numsSize;i ++)
    {
        if(nums[i] == target)
            ans ++;
    }
    *returnSize = ans;
    int* ret = (int*)malloc(sizeof(int) * *returnSize);
    int j = 0;
    for(int i = 0;i < numsSize;i ++)
    {
        if(nums[i] == target)
        {
            ret[j++] = i;
        }
    }
    return ret;
}
}

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

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

相关文章

网络安全 Day16-计算机网络知识01

计算机网络知识01 1. 什么是网络2. 网络分类3. 网卡4. 网线5. MAC地址 1. 什么是网络 局域网&#xff08;私有网&#xff09;图片 路由器作用&#xff1a;隔离网络帮人选择最佳路径。内网地址就是网关。外网地址就是公网地址。 2. 网络分类 局域网&#xff1a;本地私有的一…

leetcode:1313. 解压缩编码列表(python3解法)

难度&#xff1a;简单 给你一个以行程长度编码压缩的整数列表 nums 。 考虑每对相邻的两个元素 [freq, val] [nums[2*i], nums[2*i1]] &#xff08;其中 i > 0 &#xff09;&#xff0c;每一对都表示解压后子列表中有 freq 个值为 val 的元素&#xff0c;你需要从左到右连接…

12.3.3 Shell script 的默认变量($0, $1...)

举例来说&#xff0c;如果你想要重新启动系统的网络&#xff0c;可以这样做&#xff1a; script 是怎么达成这个功能的呢&#xff1f;其实 script 针对参数已经有设置好一些变量名称了&#xff01;对应如下&#xff1a; 执行的脚本文件名为 $0 这个变量&#xff0c;第一个接的参…

AOP操作日志记录(将增、删、改相关接口的操作日志记录到数据库表中)

1.1 需求 需求&#xff1a;将案例中增、删、改相关接口的操作日志记录到数据库表中 就是当访问部门管理和员工管理当中的增、删、改相关功能接口时&#xff0c;需要详细的操作日志&#xff0c;并保存在数据表中&#xff0c;便于后期数据追踪。 操作日志信息包含&#xff1a;…

mac电脑清理系统占用空间清理优化操作教程

mac系统广受用户的喜爱和信赖。但是&#xff0c;很多mac用户可能会发现&#xff0c;随着使用时间的增长&#xff0c;mac系统占用的空间越来越大&#xff0c;导致电脑运行缓慢&#xff0c;甚至出现磁盘空间不足的提示。那么&#xff0c;mac系统内存为什么那么大&#xff1f;mac清…

解析国产音频数模转换芯片的应用领域

数模转换器是用于数模转换的设备。数字信号定义为时间离散和幅度信号离散。同时,将模拟信号定义为时间连续和连续幅度信号。数模转换器将定点二进制数字(适当的抽象精度数字)转换为物理测量结果。数模转换器基于Nyquist-Shannon采样定理工作。它指出&#xff1a;如果采样率大于…

OJ练习第143题——二叉树展开为链表

二叉树展开为链表 力扣链接&#xff1a;114. 二叉树展开为链表 题目描述 给你二叉树的根结点 root &#xff0c;请你将它展开为一个单链表&#xff1a; 展开后的单链表应该同样使用 TreeNode &#xff0c;其中 right 子指针指向链表中下一个结点&#xff0c;而左子指针始终…

多个deb包合并成一个deb包的方法

文章目录 前言一 deb基础知识1.1 目录结构1.2 包结构说明 二、多个deb包合并一个deb包2.1 下载离线deb包2.2 解压安装包2.3 deb包合并 三、使用合并deb包可能存在的问题四、总结 前言 在UOS系统中默认没有开启开发者模式&#xff0c;此时若需要安装多个deb包时&#xff0c;只能…

最短路算法(Dijkstra Bellman-Ford SPFA Floyd)

目录 最短路算法总览Dijkstra算法1.朴素Dijkstra算法算法步骤算法应用Dijkstra求最短路Ⅰ 2.堆优化Dijkstra算法算法步骤算法应用Dijkstra求最短路Ⅱ Bellman-Ford算法算法步骤算法应用有边数限制的最短路 SPFA算法算法步骤算法应用1. spfa求最短路2. spfa判断负环 Floyd算法算…

STM32MP157驱动开发——GPIO 和 和 Pinctrl 子系统的概念

文章目录 Pinctrl 子系统重要概念概述重要概念pin controller&#xff1a;client device&#xff1a; 代码中怎么引用 pinctrl GPIO 子系统重要概念概述在设备树中指定引脚在驱动代码中调用 GPIO 子系统头文件常用函数实例&#xff1a; BSP工程师针对芯片的寄存器写Pinctrl子系…

代码随想录day25

216. 组合总和 III 这道题和昨天的相似的地方&#xff0c;但是也有不同的特点。这道题规定了数字范围是从1-9&#xff0c;并且一个组合中&#xff0c;不能出现同样的元素&#xff0c;比如说[1&#xff0c;2&#xff0c;2]这个就不可以&#xff0c;如果取过2之后&#xff0c;就只…

在Visual C++中进行类设计的通行做法(下)——类的运行

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;今天我们来重新审视一下在Visual C中进行类设计的通行做法&#xff0c;这一篇帖子来看看在搭建好基本架构并调整好重复定义问题后&#xff0c;怎么个运行法。程序员新手会去看很多书&#xff0c;但是书中往往…

安装centos7 ping不通宿主机

1、安装Virbox虚拟机 2、安装centos 7镜像 主要有两点配置需要注意&#xff1a; A:磁盘分区 B:网络设置&#xff0c;今天的实验主要是卡在网络配置这里 网络设置&#xff0c;使用的是仅主机模式且是手动分配静态IP,要点说明 看宿主机所用的网络是哪个&#xff0c;查看window的…

OC时钟/BC时钟介绍、Windows/Linux环境查看时钟频率

一、OC时钟和BC时钟介绍 OC时钟和BC时钟是指计算机体系结构中的两种不同的时钟信号。 OC时钟&#xff08;Off-chip clock&#xff09;是指在计算机系统的主板或外部设备上产生的时钟信号&#xff0c;它通过总线传输到CPU中&#xff0c;控制着CPU与主板或外部设备之间的数据传…

Vue简介、生命周期、模版语法、条件渲染、列表渲染、style和class绑定

目录 简介 Vue基本渲染-插值和数据模型 MVVM 生命周期 模版语法 条件渲染 v-if ​编辑 v-show 列表渲染 key style绑定 class绑定 简介 Vue是一套用于构建用户界面的渐进式框架。与其他大型框架不同的是&#xff0c;Vue被设计为可以自底向上逐层应用。Vue的核心库只…

Docker 多主机部署:构建容器集群的最佳实践,助力高可用性与负载均衡

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

加载Ubuntu开发环境-iTOPRK3568开发板

配套视频&#xff1a; 安装虚拟机 ubuntu 系统&#xff1a;B站搜索北京迅为RK3568开发板 在 2.3 小节解压了迅为提供的 ubuntu 镜像&#xff0c;然后打开虚拟机&#xff0c;如下图所示&#xff1a; 点击上图中的红色框&#xff0c;选择在 2.3 小节中解压的 Ubuntu18 文件夹下…

oracle单个用户最大连接数限制

项目经理反馈&#xff0c;现场已做了单个用户的最大连接数2000的限制&#xff0c;但数据库还是报无法连接&#xff0c;故障用户的连接数已3800多了。 查看日志报错如下 2023-07-20T13:07:57.79465308:00 Process m000 submission failed with error 20 Process m000 submiss…

Matlab对FS32K144编程--串口通讯

1、配置系统运行周期10ms 2、设置串口通讯通道为通道1&#xff0c;波特率设为9600 3、设置串口发送-100ms发送一次 4、设置接收中断接收数据 5、编译下载&#xff0c;串口发送消息

go使用gin结合jwt做登录功能

1、安装gin go get -u github.com/gin-gonic/gin 2、安装session go get github.com/gin-contrib/sessions 3、安装JWT鉴权 go get "github.com/golang-jwt/jwt/v4" 4、创建一个jwt的工具文件 package utilsimport ("errors""github.com/golan…