顺序表——习题

1. 轮转数组

代码实现:

// 逆置数组
void nizhi_array(int *nums, int l, int r) { // 左闭右闭if (l >= r) {return ;}for (int i = l, j = r; i < j; i++, j--) {int temp = nums[i];nums[i] = nums[j];nums[j] = temp;}
}void rotate(int *nums, int numsSize, int k) {if (nums == NULL || k == 0 || numsSize == 1) {return ;}if (k > numsSize) {k %= numsSize;}nizhi_array(nums, 0, numsSize - 1);nizhi_array(nums, 0, k - 1);nizhi_array(nums, k, numsSize - 1);
}

2. 合并两个有序数组

代码实现:把数组nums2元素添加在数组nums1元素后面,再冒泡排序

void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){int k = m;for (int i = 0; i < n; i++) {nums1[k++] = nums2[i];}int flag = 1; // 标志位优化 当序列在找到所有的最大值之前就已经将序列排好序了,直接结束循环for (int i = nums1Size - 1; i >= 1 && flag; i--) { // i决定了哪一轮冒泡flag = 0;for (int j = 0; j < i; j++) { // j决定哪两个元素进行比较if (nums1[j] > nums1[j + 1]) {flag = 1;int temp = nums1[j];nums1[j] = nums1[j + 1];nums1[j + 1] = temp;}}}
}

3. 移动零

代码实现:双指针

void moveZeroes(int *nums, int numsSize){int l = 0; // 指向零int r = 0; // 不指向零while (r < numsSize) {if (nums[r] != 0) {int temp = nums[r];nums[r] = nums[l];nums[l] = temp;l++;}r++;}
}

4. 复写零

代码实现:

void duplicateZeros(int *arr, int arrSize) {for (int i = 0; i < arrSize; i++) {if (arr[i] == 0) {for (int j = arrSize - 1; j > i + 1; j--) {arr[j] = arr[j - 1];}if (i < arrSize - 1) {arr[i + 1] = 0;} i += 1;}}
}

5. 删除有序数组中的重复项

代码实现:

int removeDuplicates(int* nums, int numsSize){for (int i = 1; i < numsSize; i++) {if (nums[i] == nums[i - 1]) {for (int j = i; j < numsSize -1; j++) {nums[j] = nums[j + 1];}i--;numsSize--;}}return numsSize;
}

6. 颜色分类

代码实现:

(1)单指针

void swap(int *a, int *b) {int t = *a;*a = *b;*b = t;
}void sortColors(int *nums, int numsSize) {int ptr = 0;for (int i = 0; i < numsSize; ++i) { // 先将数组中的0排好if (nums[i] == 0) {swap(&nums[i], &nums[ptr]);++ptr;}}for (int i = ptr; i < numsSize; ++i) { // 再将数组中的1排在0后面,剩下的全部都是2if (nums[i] == 1) {swap(&nums[i], &nums[ptr]);++ptr;}}
}

(2)双指针

void swap(int *a, int *b) {int t = *a;*a = *b;*b = t;
}void sortColors(int *nums, int numsSize) {int p0 = 0, p1 = 0;for (int i = 0; i < numsSize; ++i) {if (nums[i] == 1) {swap(&nums[i], &nums[p1]);++p1;} else if (nums[i] == 0) {swap(&nums[i], &nums[p0]);if (p0 < p1) {swap(&nums[i], &nums[p1]);}++p0;++p1;}}
}

7. 加一

代码实现:

/*** Note: The returned array must be malloced, assume caller calls free().*/
int* plusOne(int *digits, int digitsSize, int *returnSize) {for (int i = digitsSize - 1; i >= 0; i--) {if (digits[i] == 9) {digits[i] = 0;} else {digits[i]++;*returnSize = digitsSize;return digits;}}*returnSize = digitsSize + 1;int *ret = (int*)malloc(sizeof(int) * (digitsSize + 1));memset(ret, 0, sizeof(int) * (digitsSize + 1));ret[0] = 1;return ret;
}

8. 多数元素

代码实现:投票法
因为多数元素在数组里出现的次数绝对大于n/2,所以用其他元素消去多数元素,剩下的必然是多数元素(两两抵消)

int majorityElement(int *nums, int numsSize){int a = nums[0]; // 投票对象int flag = 1; // 票数for (int i = 1; i < numsSize; i++) { // 遍历投票对象if (a == nums[i]) { // 投票对象相同,票数+1flag++;} else { // 投票对象不同,票数-1flag--;if (flag < 0) { // 该元素不是多数元素,更新投票对象并把票数置1a = nums[i];flag = 1;}}}return a; 
}

9. 丢失的数字

代码实现:计数排序思想

int missingNumber(int *nums, int numsSize) {int arr[numsSize + 1];memset(arr, 0, sizeof(arr));int i;for (i = 0; i < numsSize; i++) {arr[nums[i]]++;}for (i = 0; i <= numsSize; i++) {if (arr[i] == 0) {break;}}return i;
}

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

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

相关文章

C语言中关于strcpy函数的理解

strcpy的功能是将源指向的字符串复制到另外一个字符串中 目标指向的数组的大小应该要足够长&#xff0c;避免让源字符串中的数据溢出 关于这个函数的具体用法&#xff0c;我们可以看看下面这个程序 注意&#xff1a;strcpy函数的头文件是<string.h>&#xff0c;我们在用…

Arduino开发实例-EMG 肌肉信号传感器

EMG 肌肉信号传感器 文章目录 EMG 肌肉信号传感器1、EMG 肌肉信号传感器介绍2、硬件准备及接线3、代码实现1、EMG 肌肉信号传感器介绍 在医学研究中,测量肌肉的活动、收缩和扩张非常重要。 EMG 肌肉传感器测量肌肉活动并产生信号以显示扩张和收缩量。 因此,输出取决于所选肌…

JavaWeb——后端之maven

三、后端Web开发 1. Maven 1.1 概念 概念&#xff1a; 一款用于管理和构建java项目的工具&#xff0c;是apache下的一个开源项目 作用&#xff1a; 依赖管理&#xff1a;jar包&#xff0c;避免版本冲突问题——不用手动导jar包&#xff0c;只需要在配置文件&#xff08;pom…

【数据库原理】(8)关系数据库的关系代数

关系数据语言可以分为三类: 关系代数、关系演算和介于关系代数与关系演算之间的语言 SQL。 下面专门讲述用对关系进行运算来表达查询要求的关系代数。关系代数的运算对象是关系&#xff0c;运算结果也是关系。关系代数用到的运算符包括四类:集合运算符、专门的关系运算符、算术…

若依项目(ruoy-vue)多模块依赖情况简要分析

主pom文件关键点分析 properties标签声明变量信息&#xff1a;版本号、编码类型、java版本spring-boot依赖形式&#xff1a;spring-boot-dependencies、pom、importdependencies中添加本项目内部模块&#xff0c;同时在modules中声明模块packaging打包选择pom设置打包maven-co…

VMware Workstation虚拟机CentOS 7.9 配置固定ip的步骤

VMware Workstation虚拟机CentOS7.9配置固定ip的步骤 编辑虚拟机 打开VMware Workstation。 选择要配置的虚拟机&#xff0c;但不要启动它。 点击“编辑虚拟机设置”&#xff08;Edit virtual machine settings&#xff09;。 选择“网络适配器”&#xff08;Network Adapter&…

win11电脑图形卡不支持或已禁用硬件加速怎么解决,N卡GPU看不到cuda进程怎么办

摘要 亲&#xff0c;很高兴为你解答。win11电脑图形卡不支持或已禁用硬件加速解决方法&#xff1a;1、点击任务栏上的开始图标&#xff0c;在打开的菜单中&#xff0c;点击设置&#xff0c;&#xff08;快捷键WINX&#xff0c;点击设置&#xff09;。2、Windows系统 设置窗口&a…

找不到vcruntime140.dll怎么处理?6个修复教程分享

本文将详细介绍vcruntime140.dll文件的相关内容&#xff0c;并提供6个不同的修复教程&#xff0c;帮助大家解决这一问题。 一、vcruntime140.dll是什么文件&#xff1f; vcruntime140.dll是Visual C Redistributable Packages的一部分&#xff0c;它是Microsoft Visual Studi…

C# 2中的一些小特性

一、局部类型 在C#当中有这样一个关键字partial 用来声明类&#xff0c;结构&#xff0c;接口分为多个部分来声明。使用场景可以一部分类中写实例方法&#xff0c;一部分写属性&#xff0c;我在实际工作测试中就是将属性与实际方法是分开的。相互之间的成员互相通用。 举个例子…

秋招复习之数据结构

目录 前言 1 数据结构分类 2 基本数据类型 3 数字编码 4 字符编码 总结 前言 秋招复习之数据结构&#xff0c;数据结构分类、基本数据类型、字符编码、数字编码等基础知识。 1 数据结构分类 数据结构分为逻辑结构和物理结构。 逻辑结构分为线性数据结构&#xff08;数组链表…

卷麻了,00后测试用例写的比我还好,简直无地自容...........

经常看到无论是刚入职场的新人&#xff0c;还是工作了一段时间的老人&#xff0c;都会对编写测试用例感到困扰&#xff1f;例如&#xff1a; 如何编写测试用例&#xff1f; 作为一个测试新人&#xff0c;刚开始接触测试&#xff0c;对于怎么写测试用例很是头疼&#xff0c;无法…

私域和微商有什么区别?

私域和微商到底有什么区别呢&#xff1f;其实这两个东西有着本质性区别。 私域&#xff1a; 通过原有商业或者新媒体方式获取粉丝或顾客&#xff0c;然后用微信等社交工具&#xff0c;多方位展现&#xff0c;人格专业。 最终目标是让粉丝或顾客成为品牌或IP的朋友&#xff0…

Ajax基础入门_Ajax概述,同步与异步,Axios的使用,JSON数据及FastJSON的使用

Ajax 文章目录 Ajax1 概述2 作用3 同步和异步3.1 同步3.2 异步 4 代码编写4.1 服务端4.2 客户端 5 Axios5.1 使用5.2 代码5.2.1 前端5.2.2 后端 5.3 请求方法别名 6 JSON6.1 概述6.2 JSON 基础语法6.2.1 定义格式6.2.2 js 对象与JSON的转换 6.3 发送异步请求携带参数6.4 JSON串…

机器学习(四) -- 模型评估(2)

系列文章目录 机器学习&#xff08;一&#xff09; -- 概述 机器学习&#xff08;二&#xff09; -- 数据预处理&#xff08;1-3&#xff09; 机器学习&#xff08;三&#xff09; -- 特征工程&#xff08;1-2&#xff09; 机器学习&#xff08;四&#xff09; -- 模型评估…

数据库——SQL DDLDML使用

1.实验内容及原理 1. 在 Windows 系统中安装 VMWare 虚拟机&#xff0c;在 VMWare 中安装 Ubuntu 系统,并在 Ubuntu 中搭建 LAMP 实验环境。 2. 使用 MySQL 进行一些基本操作&#xff1a; &#xff08;1&#xff09;登录 MySQL&#xff0c;在 MySQL 中创建用户&#xff0c;…

云原生架构未来发展趋势,探索容器技术未来的发展趋势

云原生架构未来发展趋势&#xff0c;探索容器技术未来的发展趋势 云原生架构未来发展趋势容器技术发展趋势无处不在的计算催生新一代容器实现深入分布式云&#xff08;从多云/混合云&#xff0c;到分布式云&#xff09;云原生操作系统Kubernetes已经成为云时代的操作系统从无状…

直流有刷电机的简单高性能控制方法

提出问题 在STM32——直流电机PI调速一文中推导了直流有刷电机的数学模型&#xff0c;在不考虑电流环的情况下&#xff0c;可做降阶处理&#xff0c;视同一个一阶系统&#xff0c;通过简单的 P I PI PI控制使得电机有着不错的响应&#xff0c;但仍然存在两个问题&#xff0c;一…

网站迁移和SEO:损害排名的常见错误

正在规划站点迁移&#xff1f; 迁移是更困难的 - 通常是可怕的 - SEO任务之一。 为了让它发挥作用&#xff0c;你需要避免常见的陷阱&#xff0c;这些陷阱可能会影响你的知名度&#xff0c;并导致流量和收入的损失。 8 月 11 日&#xff0c;我主持了一场赞助的搜索引擎杂志网…

PD SINK协议芯片系列产品介绍对比-ECP5701、FS312A、CH221K、HUSB238、AS225KL

目录 一、 ECP5701 二、 FS312A 三、 CH221K 四、 HUSB238 五、 AS225KL 在如今快节奏生活不断蔓延的背景下&#xff0c;人们对各种事情的处理也渐渐地开始要求在保证质量的情况下&#xff0c;不断加快。手机快充就是一个典型的例子&#xff0c;从开始的18W&#xff0c;30…

linux usb 驱动介绍

通用串行总线(USB)是一个在主机和许多外设之间的连接. 最初它被创建来替代许多慢速和不同的总线- 并口, 串口, 和键盘连接--有一个单个的所有设备都可以连接的总线类型. [45] USB 已经成长超出了这些 慢速连接并且现在支持几乎每种可以连接到 PC 的设备. USB 规范的最新版本增加…