刷题13 数组


989. 数组形式的整数加法

整数的 数组形式  num 是按照从左到右的顺序表示其数字的数组。例如,对于 num = 1321 ,数组形式是 [1,3,2,1] 。

给定 num ,整数的 数组形式 ,和整数 k ,返回 整数 num + k 的 数组形式 。

输入:num = [1,2,0,0], k = 34        输出:[1,2,3,4]
解释:1200 + 34 = 1234
int* addToArrayForm(int* num, int numSize, int k, int* returnSize) {int* res=malloc(sizeof(int)*100000);*returnSize=0;//从后向前进行加for(int i=numSize-1;i>=0||k>0;--i){if(i>=0){k+=num[i];}res[(*returnSize)++]=k%10;k/=10;}//翻转for(int i=0;i<(*returnSize)/2;++i){int tmp=res[i];res[i]=res[(*returnSize)-i-1];res[(*returnSize)-i-1]=tmp;}return res;
}


941. 有效的山脉数组 

 给定一个整数数组 arr,如果它是有效的山脉数组就返回 true,否则返回 false。让我们回顾一下,如果 arr 满足下述条件,那么它是一个山脉数组:arr.length >=3

  • 在 0 < i < arr.length - 1 条件下,存在 i 使得:
    • arr[0] < arr[1] < ... arr[i-1] < arr[i]
    • arr[i] > arr[i+1] > ... > arr[arr.length - 1]

        线性扫描,进行模拟。 

bool validMountainArray(int* arr, int arrSize){int i=0;while(i+1<arrSize&&arr[i]<arr[i+1]){i++;}if(i==0||i==arrSize-1){return false;}while(i+1<arrSize&&arr[i]>arr[i+1]){i++;}return i==arrSize-1;
}


1207. 独一无二的出现次数 

 给你一个整数数组 arr,请你帮忙统计数组中每个数的出现次数。如果每个数的出现次数都是独一无二的,就返回 true;否则返回 false

输入:arr = [1,2,2,1,1,3]
输出:true
解释:在该数组中,1 出现了 3 次,2 出现了 2 次,3 只出现了 1 次。没有两个数的出现次数相同。
int cmp(int* a,int* b){return *a-*b;
}
bool uniqueOccurrences(int* arr, int arrSize) {int flag[2002]={0};for(int i=0;i<arrSize;++i){if(arr[i]<0){//-1就放到下标为1001的位置flag[arr[i]+1002]++;}else{flag[arr[i]]++;}}qsort(flag,2002,sizeof(int),cmp);for(int i=0;i<2001;++i){if(flag[i]!=0){if(flag[i]==flag[i+1]){return false;}}}return true;
}


1437. 是否所有 1 都至少相隔 k 个元素 

 给你一个由若干 0 和 1 组成的数组 nums 以及整数 k。如果所有 1 都至少相隔 k 个元素,则返回 True ;否则,返回 False 。

输入:nums = [1,0,0,0,1,0,0,1], k = 2
输出:true
解释:每个 1 都至少相隔 2 个元素。

        记录 上一个1出现的下标,除了第一个1之外,每次遇到一个1就判断与前一个1的距离。

bool kLengthApart(int* nums, int numsSize, int k) {int pre=-1;for(int i=0;i<numsSize;++i){if(nums[i]==1){if(pre!=-1&&i-pre-1<k){return false;}pre=i;}}return true;
}


2553. 分割数组中数字的数位 

 给你一个正整数数组 nums ,请你返回一个数组 answer ,你需要将 nums 中每个整数进行数位分割后,按照 nums 中出现的 相同顺序 放入答案数组中。对一个整数进行数位分割,指的是将整数各个数位按原本出现的顺序排列成数组。

比方说,整数 10921 ,分割它的各个数位得到 [1,0,9,2,1] 。

输入:nums = [13,25,83,77]
输出:[1,3,2,5,8,3,7,7]
void reverse(int* res,int l,int r){while(l<r){int tmp=res[l];res[l]=res[r];res[r]=tmp;l++;r--;}return;
}
int* separateDigits(int* nums, int numsSize, int* returnSize) {int* res=malloc(sizeof(int)*100000);int l=0;for(int i=0;i<numsSize;++i){if(nums[i]<10){res[l++]=nums[i];}else{int start=l;int num=nums[i];while(num){int cur=num%10;res[l++]=cur;num/=10;}reverse(res,start,l-1);}}*returnSize=l;return res;
}


2855. 使数组成为递增数组的最少右移次数 

 给你一个长度为 n 下标从 0 开始的数组 nums ,数组中的元素为 互不相同 的正整数。请你返回让 nums 成为递增数组的 最少右移 次数,如果无法得到递增数组,返回 -1 。

一次 右移 指的是同时对所有下标进行操作,将下标为 i 的元素移动到下标 (i + 1) % n 处。

输入:nums = [3,4,5,1,2]        输出:2
解释:第一次右移后,nums = [2,3,4,5,1] 。第二次右移后,nums = [1,2,3,4,5] 。现在 nums 是递增数组了,所以答案为 2 。

        将数组分成两段,每一段都单调递增,并且前一段严格大于后一段。 

int minimumRightShifts(int* nums, int numsSize){int i=1;while(i<numsSize&&nums[i-1]<nums[i]){//找到第一个开始下降的点i++;}if(i==numsSize) return 0; //数列递增if(nums[0]<nums[numsSize-1]) return -1;//最后一个元素值大于第一个元素值int mid=i;i++;//判断mid之后的元素是否递增while(i<numsSize&&nums[i-1]<nums[i]) i++;if(i<numsSize) return -1;return numsSize-mid;
}


2869. 收集元素的最少操作次数 

 给你一个正整数数组 nums 和一个整数 k 。一次操作中,你可以将数组的最后一个元素删除,将该元素添加到一个集合中。请你返回收集元素 1, 2, ..., k 需要的 最少操作次数 。

输入:nums = [3,1,5,4,2], k = 2        输出:4
解释:4 次操作后,集合中的元素依次添加了 2 ,4 ,5 和 1 。此时集合中包含元素 1 和 2 ,所以答案为 4 。
int minOperations(int* nums, int numsSize, int k){int* ans=malloc(sizeof(int)*(k+1));for(int i=0;i<=k;++i) ans[i]=0;for(int i=0;i<numsSize;++i){//记录每个数字的下标位置if(nums[i]<=k){ans[nums[i]]=i;}}int mmin=INT_MAX;//找到符合要求的最小下标位置for(int i=1;i<=k;++i){if(ans[i]<mmin){mmin=ans[i];}}return numsSize-mmin;
}


2970. 统计移除递增子数组的数目 I 

 给你一个下标从 0 开始的  整数数组 nums 。

如果 nums 的一个子数组满足:移除这个子数组后剩余元素 严格递增 ,那么我们称这个子数组为 移除递增 子数组。比方说,[5, 3, 4, 6, 7] 中的 [3, 4] 是一个移除递增子数组,因为移除该子数组后,[5, 3, 4, 6, 7] 变为 [5, 6, 7] ,是严格递增的。

请你返回 nums 中 移除递增 子数组的总数目。注意 ,剩余元素为空的数组也视为是递增的。子数组 指的是一个数组中一段连续的元素序列。

输入:nums = [1,2,3,4]
输出:10
解释:10 个移除递增子数组分别为:[1], [2], [3], [4], [1,2], [2,3], [3,4], [1,2,3], [2,3,4] 和 [1,2,3,4]。移除任意一个子数组后,剩余元素都是递增的。注意,空数组不是移除递增子数组。
int incremovableSubarrayCount(int* nums, int numsSize) {int i=0;int n=numsSize;while(i<n-1&&nums[i]<nums[i+1]){i++;}if(i==n-1){//每个非空子数组都可以移除return n*(n+1)/2;}int ans=i+2;for(int j=n-1;j==n-1||nums[j]<nums[j+1];j--){while(i>=0&&nums[i]>=nums[j]){i--;}ans+=i+2;}return ans;
}

 

 

 

 

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

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

相关文章

12118 - Inspector‘s Dilemma (UVA)

题目链接如下&#xff1a; Online Judge 脑雾严重&#xff0c;这道题一开始我想的方向有问题.....后来看了别人的题解才写出来的..... 用的是欧拉路径的充要条件&#xff1b;以及数连通块。需要加的高速路数目 连通块个数 - 1 sum&#xff08;每个连通块中连成欧拉路径需要…

EMC学习笔记(二十三)降低EMI的PCB设计指南(三)

双层板电源分配 1.单点与多点分布2.星型分布3.创建网格平面4.旁路和磁珠5.将噪声保持在芯片附近 tips&#xff1a;资料主要来自网络&#xff0c;仅供学习使用。 1.单点与多点分布 在一个真正的单点配电系统中&#xff0c;每个有源元件都有自己独立的电源和地&#xff0c;这些…

Hibernate JPA-@PreUpdate 和@PrePersist、@MappedSuperclass应用场景

文章目录 PrePersist注解 和 PreUpdate注解PreUpdatePrePersist 应用场景给一张表加上create_time&#xff0c;update_time这样的字段&#xff0c;想实现自动保存&#xff0c;更新这两个字段 MappedSuperclassInheritanceSINGLE_TABLE(将所有父类和子类集合在一张表)TABLE_PER_…

【React】如何使antd禁用状态的表单输入组件响应点击事件?

最近遇到一个需求&#xff0c;需要在<Input.textarea>组件中&#xff0c;设置属性disabled为true&#xff0c;使textarea响应点击事件&#xff0c;但直接绑定onClick并不会在禁用状态下被响应。 解决方法1 之后尝试了很多方法&#xff0c;比如设置csspointer-events:no…

【Make编译控制 07】CMake常用命令

目录 一、变量相关命令 1. 定义变量 2. 设置C标准 3. 设置输出路径 二、文件相关命令 1. file 命令 2. aux_source_directory 命令 2. include_directories 命令 三、字符串相关命令 1. 字符串输出 2. 字符串拼接 3. 字符串移除 前情提示&#xff1a;【Make编译控制 …

【Dubbo源码二:Dubbo服务导出】

入口 Dubbo服务导出的入口&#xff1a;服务导出是在DubboBootstrapApplicationListener在监听到ApplicationContextEvent的ContextRefreshedEvent事件后&#xff0c;会触发dubboBootstrap.start(), 在这个方法中最后会导出Dubbo服务 DubboBootstrapApplicationListener Dub…

Python装饰器详解:实例分析与使用场景

在Python中,装饰器是一种强大的语法特性,允许在不修改原始代码的情况下,动态地修改或增强函数的行为。本文将通过两个实际的例子,分别介绍了计时装饰器和缓存装饰器,并深入探讨了它们的实现原理和使用场景。 1. 计时装饰器 import timedef timing_decorator(func):def w…

无人机飞控算法原理基础研究,多旋翼无人机的飞行控制算法理论详解,无人机飞控软件架构设计

多旋翼无人机的飞行控制算法主要涉及到自动控制器、捷联式惯性导航系统、卡尔曼滤波算法和飞行控制PID算法等部分。 自动控制器是无人机飞行控制的核心部分&#xff0c;它负责接收来自无人机传感器和其他系统的信息&#xff0c;并根据预设的算法和逻辑&#xff0c;对无人机的姿…

【基础】比较器 - 振荡来自何处?

比较器是一个简单的概念-在输入端对两个电压进行比较。输出为高或者低。因此&#xff0c;在转换的过程中为什么存在振荡。 当转换电平缓慢改变的时候&#xff0c;这个现象经常会发生。常常是由于输入信号存在噪声&#xff0c;因此在转换电平附近的轻微波动会引起输出端的振荡。…

KMP算法与前缀函数

KMP算法与前缀函数 说明 本文参考了 OI Wiki。 首先来明确几个概念&#xff1a; 后缀&#xff1a;后缀是从父串某个位置i开始到末尾结束的一个特殊字符串。真后缀&#xff1a;不为父串本身的后缀字符串。前缀&#xff1a;从父串开头到某个位置i结束的一个特殊字符串。真前缀…

in r, 找出所有重复的元素,包括第一个 R语言|如何筛选所有的重复行(包括第一行重复在内)

library(dplyr) data <- metadata %>%group_by(type) %>% # 根据你要筛选的列进行分组filter(duplicated(type)|n()!1) %>% # 将该列中有重复的行挑选出来ungroup() 方法二 # 示例向量 x <- c(1, 2, 3, 2, 4, 5, 5, 6)# 找出所有重复的元素&#xff08;包括第一…

基于深度学习算法的轴承故障自主分类

1. 要求 轴承有3种故障&#xff1a;外圈故障&#xff0c;内圈故障&#xff0c;滚珠故障&#xff0c;外加正常的工作状态。如表1所示&#xff0c;结合轴承的3种直径&#xff08;直径1,直径2,直径3&#xff09;&#xff0c;轴承的工作状态有10类&#xff1a; 表1 轴承故障类别 外…

单片机学习路线(简单介绍)

学习单片机对于电子爱好者和未来的嵌入式系统工程师来说是一段激动人心的旅程。单片机因其强大的功能、灵活性以及在各种智能设备中的广泛应用&#xff0c;成为了电子和计算机科学领域一个不可或缺的组成部分。如果你对如何开始这段旅程感到好奇&#xff0c;那么你来对地方了。…

Python爬虫:搭建本地IP池

本地代理IP池 代理IP池是一种由多个代理IP构成的集合&#xff0c;可以通过接口等方式随时获取可用的代理IP。通俗地打个比方&#xff0c;它就是一个池子&#xff0c;里面装了很多代理ip。代理IP具有以下几个特征&#xff1a; 1、池子里的ip是有生存周期的&#xff0c;它们将被…

Nginx配置php留档

好久没有用过php了&#xff0c;近几日配置nginxphp&#xff0c;留档。 安装 ubunt下nginx和php都可以使用apt安装&#xff1a; sudo apt install nginx php8 如果想安装最新的php8.2,则需要运行下面语句&#xff1a; sudo dpkg -l | grep php | tee packages.txt sudo add-…

计算机算术

计算机算术 数据是什么 数据是各种各样的信息&#xff0c;如数字、文本、计算机程序、音乐、图像、符号等等&#xff0c;实际上&#xff0c;信息可以是能够被计算机存储和处理的任何事物。 位与字节 计算机中存储和处理信息的最小单位是位&#xff08;Binary digit比特&#x…

[C#] 如何对列表,字典等进行排序?

对列表进行排序 下面是一个基于C#的列表排序的案例&#xff1a; using System; using System.Collections.Generic;class Program {static void Main(string[] args){// 创建一个列表List<int> numbers new List<int>() { 5, 2, 8, 1, 10 };// 使用Sort方法对列…

[动态规划]判断整除

题目 一个给定的正整数序列&#xff0c;在每个数之前都插入号或-号后计算它们的和。比如序列&#xff1a;1、2、4共有8种可能的序列&#xff1a; (1) (2) (4) 7 (1) (2) (-4) -1 (1) (-2) (4) 3 (1) (-2) (-4) -5 (-1) (2) (4) 5 (-1) (2) (-4) -3 (…

Open CASCADE学习|保存为STL文件

STL (Stereolithography) 文件是一种广泛用于3D打印和计算机辅助设计 (CAD) 领域的文件格式。它描述了一个三维模型的表面而不包含颜色、材质或其他非几何信息。STL文件通常用于3D打印过程中&#xff0c;因为它们仅包含构建物体所需的位置信息。 由于STL文件只包含表面信息&am…

使用raw.gitmirror.com替换raw.githubusercontent.com以解决brew upgrade python@3.12慢的问题

MacOS系统上&#xff0c;升级python3.12时&#xff0c;超级慢&#xff0c;而且最后还失败了。看了日志&#xff0c;发现是用curl从raw.githubusercontent.com上下载Python安装包超时了。 解决方案一&#xff1a;开启翻墙工具&#xff0c;穿越围墙 解决方案二&#xff1a;使用…