当前位置: 首页 > news >正文

LeetBook学习-C语言-数组

1.数组的操作

        1.1 读取元素

                知道内存地址可以快速访问,时间复杂度为O(1)

        1.2 查找元素

                从首地址开始,逐个查找,最坏时间复杂度为O(N)

        1.3 插入元素

                插入元素,首先位置要腾空,而后执行插入操作。

        1.4 删除元素

                删除掉某一个元素后,位置会出现空缺,后面的元素要进行填补操作。时间复杂度为O(N),N为数组的长度

2.相关例题(C语言代码)

        2.1 给你一个整数数组 nums ,请计算数组的 中心下标 。

        数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。

        如果中心下标位于数组最左端,那么左侧数之和视为 0 ,因为在下标的左侧不存在元素。这一点对于中心下标位于数组最右端同样适用。

        如果数组有多个中心下标,应该返回 最靠近左边 的那一个。如果数组不存在中心下标,返回 -1 。(来源力扣(LeetCode)

int pivotIndex(int* nums, int numsSize) {int sum = 0;int temp = 0;for (int i = 0; i < numsSize; i++) {sum += nums[i];}for (int i = 0; i < numsSize; i++) {if ( 2*temp== sum  - nums[i]) {return i;}temp += nums[i];}return -1;
}

        2.2 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为 O(log n) 的算法。(来源力扣(LeetCode) 使用二分法

int searchInsert(int* nums, int numsSize, int target) {int left = 0;int right = numsSize - 1;while (left <= right) {int mid = left + (right - left) / 2;if (nums[mid] == target) {return mid;} else if (nums[mid] < target) {left = mid + 1;} else {right = mid - 1;}}return left;
}

        2.3 以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。(来源力扣LeetCode)

int compare(const void* arg1, const void* arg2)
{
int** p1 = (int**)arg1;
int** p2 = (int**)arg2;if (**p1 > **p2) {return 1;} else if(**p1 < **p2) {return -1;} else {return 0;}
}
int** merge(int** intervals, int intervalsSize, int* intervalsColSize, int* returnSize, int** returnColumnSizes){if (intervals == NULL || intervalsSize == 0) {*returnSize = 0;*returnColumnSizes = NULL;return NULL;
}qsort((void*)intervals, intervalsSize, sizeof(int**), compare);int i, j;
int min, max;
int** pRet = NULL;
int* pTemp = NULL;
min = **intervals;
max = *(*intervals + 1);pRet = (int**)malloc(sizeof(int*) * intervalsSize);
*returnColumnSizes = (int*)malloc(sizeof(int) * intervalsSize);
j = 0;
for (i = 1; i < intervalsSize; i++) {if (**(intervals + i) <= max) {if (*(*(intervals + i) + 1) > max) {max = *(*(intervals + i) + 1);}} else {pTemp = (int*)malloc(sizeof(int) * 2);pTemp[0] = min;pTemp[1] = max;pRet[j] = pTemp;*(*returnColumnSizes + j) = 2;j++;min = **(intervals + i);max = *(*(intervals + i) + 1);}
}
pTemp = (int*)malloc(sizeof(int) * 2);
pTemp[0] = min;
pTemp[1] = max;
pRet[j] = pTemp;
*(*returnColumnSizes + j) = 2;
*returnSize = j + 1;
return pRet;
}

http://www.lryc.cn/news/260216.html

相关文章:

  • 23种策略模式之策略模式
  • 【笔试强化】Day 2
  • windows禁用系统更新
  • ES6原生音乐播放器(有接口)
  • Django和ECharts异步请求示例
  • Java序列化、反序列化-为什么要使用序列化?Serializable接口的作用?
  • 连锁零售企业如何优化网络性能?
  • [已解决]HttpMessageNotReadableException: JSON parse error: Unexpected character:解析JSON时出现异常的问题分析与解决方案
  • 华为OD机试 - 找数字(Java JS Python C)
  • ElasticSearch - networking配置global
  • GPT4停止订阅付费了怎么办? 怎么升级ChatGPT plus?提供解决方案
  • MySQL数据库,视图、存储过程与存储函数
  • 【Pytorch】学习记录分享3——PyTorch 自动微分与线性回归
  • Android Studio实现俄罗斯方块
  • 【Hive】——DDL(DATABASE)
  • 【华为OD题库-092】单词加密-java
  • 构建一个简单的 npm 验证项目
  • 利用vue-okr-tree实现飞书OKR对齐视图
  • 持续集成交付CICD:CentOS 7 安装SaltStack
  • vscode 环境配置
  • pytorch文本分类(二):引入pytorch处理文本数据
  • Centos硬盘操作合集
  • 三大循环语句
  • Mybatis详解
  • spring cloud alibaba RocketMQ 最佳实践
  • php使用OpenCV实现从照片中截取身份证区域照片
  • 抖音ip地址切换会看不到视频吗
  • 有关爬虫http/https的请求与响应
  • 模块二——滑动窗口:438.找到字符串中所有字母异位词
  • 排序算法(二)-冒泡排序、选择排序、插入排序、希尔排序、快速排序、归并排序、基数排序