剑指offer---基础知识:数组

【剑指offer】数组中的逆序对 思路:最简单的方法是顺序数组,将每个数字与后面的比较,统计逆序对的个数,这种方法的时间复杂度为O(n*n),这种方法写出的代码在九度OJ上测试,会超时。剑指offer给出了归并排序的思路,这个有点难想到啊,也可能是我太弱了,根本没往这方面想!理解了思路,就不难了,将数组划分成两个子数组,再将子数组分别划分成两个子数组,统计每个子数组内的逆序对个数,并将其归并排序,再统计两个子数组之间的逆序对个数,并进行归并排序。这就是归并排序的变种,在归并排序代码的基础上稍作改进即可。 合理还要注意一点:全局变量c 阅读详情

1.sizeof关键字

1.1 定义一个空的类型,里面没有任何成员变量和成员函数,对该类型求sizeof,得到的结果是多少?
答案:1
解析:
空类型的实例中不包含任何信息,本来求sizeof应该是0,但是当我们声明该类型的实例的时候,它必须在内存中占有一定的空间,否则无法使用这些实例。至于占用多少内存,由编译器决定。Visual Studio中每个空类型的实例占用1字节的空间。

1.2 如果在该类型中添加一个构造函数和析构函数,再对该类型求sizeof得到的结果又是多少?
答案:1
解析:
调用构造函数和析构函数只需要直到函数的地址即可,而这些函数的地址只与类型相关,而与类型的实例无关,编译器也不会因为这两个函数而在实例内添加任何额外的信息。

1.3 如果把析构函数标记为虚函数,sizeof得到的结果又是多少?
答案:(32位系统)4、(64位系统)8
解析:
C++的编译器一旦发现一个类型中有虚函数,就会为该类型生成虚函数表,并在该类型的每一个实例中添加一个指向虚函数表的指针。在32位的机器上,一个指针占4字节的空间,如果在64位的机器上,一个指 针占8字节的空间。

2.数据结构

常用的数据结构:数组、字符串、链表、树、栈及队列

2.1 数组
数组占据一块连续的内存并按照顺序存储数据。创建数组时,首先指定数组的容量,然后根据大小分配内存。
数组中的内存是连续的,可根据下标读写任何元素,时间效率高,但经常有空闲的区域没有使用,空间效率不是很好。
2.2 找出数值中重复的数字
在一个长度为n的数组里的所有数字都在0~n-1的范围内。数组中某些数字是重复的,但不知道有哪几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者是3。
方法一:排序,将数组的数字排序,在排好序的数组中找到重复的数组,时间复杂度很大O(nlogn)。
方法二:把每一个数字都扫描,看与其他剩下的数字是否相同。时间复杂度是O(n^2),两次for循环找出相同的数。
方法三:哈希表,扫描数组里的每个数字,看哈希表里是否有这个数字,没有就将这个数字加进去,有的话,则该数字重复。时间复杂度是O(n),但提高时间效率是以一个大小为O(n)的哈希表为代价
散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。
方法四:数组里所有的数组都是0到n-1的范围内。如果数组里没有重复的数字,那么每个数字排序后的数字i都会在下标为i的位置上。由于数组中有重复的数字,那么这个位置上就会有多个数字,有些位置上也会没有数字。
从头到尾扫描这个数组的每个数字。当到下标为i的数字时,先比较这个数字m是否等于下标i,如果等于那么就扫描下一个数字;如果不是,那它和第m个数字相比较。如果和第m个数字一样,则找到重复的数字,因为该数字在第i个位置和第m个位置都出现了;如果不是则把该第i位置上的数字和第m个位置上的数字交换,刚在它原本属于的位置上去。重复此过程,找到重复的数字。(总体时间复杂度O(n))
测试用例:
(1)长度为n的数组里包含一个或多个重复的数字
(2)数组中不包含重复的数字
(3)无效的输入的测试用例:输入空指针、超出边界的数组值等
函数实现:
/
*********************************
Function: ai_findDuplicteDigit
Description:找到整型数组中的重复的数字
Parameter: number 需要查找的数组, 数字是0-n-1
len 数据长度
pDupDigit 返回重复的数字
Output: None
Return: None
*************************************************/
int ai_findDuplicteDigit(int number[], int len, int *pDupDigit)
{
int i = 0;
int tmp = 0;

if (!number || len <= 0 || !pDupDigit)
{
    return -1;
}

/* 校验值是否正确 */
for (i = 0; i < len; i++)
{
    if (number[i] < 0 || number[i] >= len)
    {
        return -1;
    }
}

for (i = 0; i < len; i++)
{
    while (i != number[i])
    {
        if (number[i] != number[number[i]])
        {
            tmp = number[i];
            number[i] = number[tmp];
            number[tmp] = tmp;
        }
        else
        {
            *pDupDigit = number[i];
            return 0;
        }
    }
}

return -1;

}

2.2 字符串

/*************************************************
Function: st_replaceBlank
Description:替换空格,实现将字符串中的每个空格替换成"%20"
在网络编程中,如果URL参数中含有特殊的字符,如空格、#等,则可能导致服务器端
无法获取正确的参数值,需要将这些特殊字符转换成服务器可识别的字符
转换规则:在’%'后面跟上ASCII码的两位十六进制表示。例如空格的ASCII是32,即十六进制0x20,
则空格替换为"%20"
解决方案有两种:空格是一个字符,但"%20"是三个字符
1.从前往后遇到空格将后面的字符往后移动,时间复杂度是O(n平方)
2. 时间空间为O(n)的方案
(1)遍历字符串,查找空格个数,替换字符串之后的总长度为原有字符串的总长度加上空格数乘以2
(2)从字符串的后面开始复制和替换,准备两个指针P1和P2,P1指向原始字符串的末尾,而P2指向替换之后的字符串的末尾
向前移动P1,逐个把它指向的字符复制到P2位置,遇到空格P1向前移动1格,P2移动3格
Parameter: string 字符串
length 字符串空间的总大小

Output: None
Return: None
*************************************************/
int st_replaceBlank(char string[], int length)
{
int blankNum = 0;
int realLength = 0;
int i = 0;
char *p1 = NULL;
char *p2 = NULL;
int outLength = 0;

if (!string || length <= 0)
{
    return -1;
}

realLength = strlen(string);
if (realLength <= 0)
{
    return 0;
}

/* 查询空字符个数 */
for (i = 0; i < realLength; i++)
{
    if (string[i] == ' ')
    {
        blankNum++;
    }
}

printf("blankNum:%d\n", blankNum);
if (blankNum == 0)
{
    return 0;
}

outLength = realLength + 1 + 2 * blankNum;
if (length < outLength)
{
    return -1;
}

p1 = &string[realLength + 1];
p2 = &string[outLength];
*p2 = *p1;
p1--;
p2--;
for (i = realLength; i >= 0; i--)
{
    if (string[i] == ' ')
    {
        p1--;
        *p2 = '0';
        *(--p2) = '2';

        *(--p2) = '%';
        p2--;
    }
    else
    {
        *p2 = *p1;
        p1--;
        p2--;
    }
}

return 0;

}

Python版剑指Offer题解 Python版剑指Offer题解 本题解配合leetcode中剑指Offer刷题使用 参考链接:图解算法数据结构 文章目录剑指 Offer 03. 数组中重复的数字剑指 Offer 04. 二维数组中的查找剑指 Offer 05. 替换空格剑指 Offer 06. 从尾到头打印链表剑指 Offer 07. 重建二叉树剑指 Offer 09. 用两个栈实现队列剑指 Offer 10- I. 斐波那契数列剑指 Offer 10- II. 青蛙跳台阶问题剑指 Offer 11. 旋转数组的最小数字剑指 Offe 阅读详情

相关推荐

【LeetCode】剑指Offer

LeetCode剑指Offer

Arthur的博客 1357

剑指offer:数组

要查找的数字,则说明该列其他元素都大于要查找的数字,便可以删掉该列;要查找的数字,则说明该行其他元素都大于要查找的数字,便可以删掉该行;在一维数组a[ ]中,a.length 方法的意思就是返回这个数组的长度。在二维数组中,如果直接调用b.length方法,返回的则是b数组的行数。要查找的数字,则说明该行其他元素也都小于要查找的数字,便可以删掉该行。要查找的数字,则说明该列其他元素也都小于要查找的数字,便可以删掉该列。要查找的数字,则查找过程结束;要查找的数字,则查找过程结束;的顺序排序,每一列都按照。

一路生花 583

ORACLE 12C RAC 启动报错,错误代码 ORA-27300,ORA-27301,ORA-27302

非一体机,12.2 无任何补丁,2套X86服务器,1节点集群异常(数据库正常,还有会话),2节点正常工作,负载不高,硬件、空间均未检查到异常,多路径存在掉线的情况,但通过Mulitpath -ll 看又是正常的,2根私有网络,其中一根不同,sysctl中配置的稀疏模式。5、再次加成crs alert ohas等集群日志,以及根据现象和错误再次到后台sr中查找可用信息,发现有一个类似问题,12.2 RAC 无任何补丁,报同样错误,解决方案为重启两套服务器。查询MOS文档以及后台文档,排除上面指出的问题。

weixin_42344665的博客 1464

剑指offer数组题目汇总(面试必备)

剑指 offer 数组题目汇总(C++版)   1、数组中重复的数字 一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。找出数组中任意一个重复的数字。 思路1:先排序,在遍历。 时间复杂度:O(nlog(n)) ,空间复杂度:O(1) 思路2:遍历数组时查询哈希表是否已有这个数,有就返回,没有就添加。时间复杂度:O(n), 空间复杂度:O(n) 思路1和2比较简单,代码就不贴了。主要说一下下面的方

Destiny_shine的博客 537

centos7下安装gcc-10.3.0

生成多个系统版本的代码,如果你的操作系统是32位,默认就已经设置为 disable,这时gcc仅能生成32位的可执行程序;这里只开启了c,c++ 和fortran,因为支持的语言越多,就需要安装越多的相应静态与动态库,还有五花八门的依赖库,这会让管理变得困难,体积也会变得庞大。启用posix标准的线程支持,这个设置取决于宿主或目标操作系统的类型,其它可用值有:aix,dec,solaris,win32等,如果你是其它的类UNIX系统,就需要设置相应的值。指定安装路径,这里没有指定,就直接放到文件夹里就好。

lxystar2003的博客 1189

MuJoCo柔性体仿真实战:从FlexComp建模到自定义模型导入

柔性体仿真是机器人交互研究中不可或缺的一环,MuJoCo作为高精度物理求解器,凭借高效的求解速度与批量并行能力,成为强化学习与软体抓取任务的热门选择。其FlexComp机制将连续材料离散为粒子-约束系统,以较低建模成本模拟布料、软组织等形变行为,相比Gazebo等平台更具实时性与可扩展性。技术价值体现在自定义柔性体建模与导入流程中:通过XML配置网格密度、间距与材料参数,即可生成贴合任务需求的软体垫子或硅胶抓手。在柔性抓取、颗粒抓手、医疗仿真等场景中,该方法能快速构建可训练的环境。围绕环境搭建、FlexCo

weixin_29045585的博客 159

剑指offer专题——数组(查找)(持续更新)

文章目录剑指offer 01——二维数组的查找 剑指offer 01——二维数组的查找 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 [ [1, 2, 8, 9], [2, 4, 9, 12], [4, 7,10,13], [6, 8 11,15] ] 给定 target = 7,返回 true。 给定 target = 3,返回 false。

m0_46195138的博客 408

[华为]华为无线控制器AC6508简单配置实例

用户需求:3个地址段,分别是领导、员工、访客,访问控制策略是只允许访客上网,不允许访客访问内网。 vlan173为设备的管理地址和AP获取的地址,领导、员工、访客的vlan分别是vlan131/vlan132/vlan133 首先是许可的下载,使用华为的账号登陆http://app.huawei.com/isdp ,然后按照说明输入许可,下载许可,将许可导入到设备。 web界面访问后,直接按照配置向导配置就可以了。 1.基本配置里主要配置license、设备名称、设备时间 2.端口配置:连接上

日子_很简单 2万+

剑指offer之数组查找

题目描述     在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 完成本题的思路就是:既然已经知道每一行的最后一个数为该行的最大数,那就用每一行的最大数与目标数进行比较,当目标数大于本行最大数时,说明在这一行都不可能找到目标数,即让行数自增,用下一行...

叶梓梓的博客分享 415

【IC前端虚拟项目】spyglass lint环境组织与lint清理

和上个虚拟项目的lint清理环节一样,关于spyglass的lint清理功能与流程还是大家通过各种资料去学习下就好啦。和之前不同的事,这次的虚拟项目里我把流程封装为Makefile,更加的贴近了实际项目交付流程。而后就可以根据提示进行lint的清理工作了。

moon9999的博客 1886

基于Simulink进行步进电机的重复控制仿真建模

目的:通过引入一个周期延迟环节来补偿系统的周期性误差,从而提高系统对周期性参考信号或扰动的跟踪性能。方法内部模型原理:在控制器中嵌入一个与周期性信号相关的模型(例如周期延迟环节),以实现对周期性误差的零稳态误差控制。滤波器设计:为了避免高频噪声放大,通常会在重复控制器中加入低通滤波器。优势对周期性信号具有良好的跟踪性能。不需要精确的数学模型即可实现高性能控制。挑战:需要合理设计重复控制器的参数以避免系统不稳定。

MHD0815的博客 382

剑指offer 数组

数组概念介绍 数据是最简单的数据结构,它占据一块连续的内存并按照顺序存储数据。创建数组时,首先指点数组的容量大小,然后根据大小分配内存。 缺点:空间效率不高。经常有空闲的区域灭有得到充分利用。 优点:时间效率很高。可以根据时间效率高的特点,来实现简单的哈希表:把数组的下标设为哈希表的键值,数组中的每一个数字设为哈希表的值,“键值-值”配对。快速高效。 解决方法: 动态数组。这对时间性能有负面影响...

真的是个瘦子 376

为什么idea已经改了UTF-8还是乱码,如何解决?

🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!

**My Coding Family** 1576

剑指 Offer 总结 - leetcode 剑指offer系列

剑指 Offer 系列完结撒花!! ???????? 本篇文章是对整个系列的精华总结, 对系列的每篇文章进行了分类, 并用一句话概括每道题的思路, 方便大家理解和记忆, 当然也包含原文完整链接供大家参考 总的来说, 写这个系列耗费了我不少精力, 不过我也很开心能和大家分享, 真心希望能对大家有所帮助, 也希望大家能够多多点赞转发和分享, 让更多人看到, 谢谢~ 接下来我需要休整一段时间来准备新的系列了, 中间也可能会有一些不定期更新. 至于新系列是什么呢? 大家敬请期待 ???? P.S.

随便发挥的博客 3561

网络攻防——kali操作系统基本使用

主要介绍如何搭建kali虚拟机,然后介绍了一个简单的攻击方法,切记,网络恶意攻击属于违法行为

weixin_46560512的博客 2万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

牛客网《剑指offer》专栏刷题练习之数组专精

🔥前言 今天分享牛客网《剑指offer》专栏里的经典数组算法题的题解,从解题思路到具体代码解释步步到位。

叶落秋白的博客 1518

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

LeetCode【剑指offer】系列(数组篇)

搜集《剑指offer》在Leetcode上对应的题目,给出题目链接和题解

永远相信美好的事情即将发生 1955

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

剑指offer系列——剑指 Offer 11. 旋转数组的最小数字(C语言)

⭐️前面的话⭐️ 大家好!博主开辟了一个新的专栏——剑指offer,我要开始刷题了!这个专栏会介绍《剑指offer》书上所有的面试编程题。并且会分享一些我的刷题心得。由于博主水平有限,如有错误,欢迎指正,如果有更好的解题思路和算法可以分享给博主哦!一起加油!一起努力!剑指 Offer 11. 旋转数组的最小数字(C语言)

未见花闻的博客 1407

【剑指offer】旋转数组的最小数字

剑指offer:旋转数组中最小数字

子夜的个人博客 1323

剑指 Offer 56 - I. 数组中数字出现的次数

剑指 Offer 56 - I. 数组中数字出现的次数

Edison's 小宇宙 1万+

剑指offer——数组篇

这些都是在《剑指offer》中关于数组部分的经典算法题,简单做了个整理

学习C++的小陈同学 987

剑指Offer题解——数组

文章目录剑指 Offer 03. 数组中重复的数字解法剑指 Offer 04. 二维数组中的查找解法剑指 Offer 29. 顺时针打印矩阵解法剑指 Offer 53 - I. 在排序数组中查找数字 I解法剑指 Offer 53 - II. 0~n-1中缺失的数字解法推荐阅读 剑指 Offer 03. 数组中重复的数字 力扣链接 找出数组中重复的数字。 在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请

wardseptember的博客 671

【剑指offer】数组篇

【剑指offer】数组篇题目一:构建乘积数组题目二:数组中重复的数字题目三: 二维数组中的查找 题目一:构建乘积数组 问题:给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B中的元素B[i]=A[0]A[1]…*A[i-1]A[i+1]…*A[n-1]。不能使用除法。 思路一 很简单!遍历两边数据就OK! 代码 import java.util.ArrayList...

weixin_39586220的博客 220

力扣剑指Offer 第5天 查找算法(中等) 剑指 Offer 04. 二维数组中的查找 剑指 Offer 11. 旋转数组的最小数字 剑指 Offer 50. 第一个只出现一次的字符

力扣剑指Offer 第5天 查找算法(中等) 剑指 Offer 04. 二维数组中的查找 剑指 Offer 11. 旋转数组的最小数字 剑指 Offer 50. 第一个只出现一次的字符 剑指 Offer 04. 二维数组中的查找 题目 在一个n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 示例: 现有矩阵 matrix 如下: [ [1, 4, 7, 11, 15]

Ctrl_kun的博客 4552

剑指offer 数组中重复的数字

剑指offer题型分类及各题的代码及解题思路 题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。 思路1:哈希法 由于所有元素值是有范围的,因此可以用一个长...

请叫我皮皮虾的博客 554

【剑指Offer】剑指offer题目----数组

【剑指Offer】剑指offer题目 本文为《剑指Offer》刷题笔记的总结篇,计划将牛客网上《剑指Offer》的66道题刷了一遍,以博客的形式整理了一遍,这66道题属于相对基础的算法题目,对于刷题练手是很好的实践,接下来会继续回到LeetCode,争取每天拿出一个小时,刷一到两道题。   如果有什么问题,请多多指教。 文章目录【剑指Offer】剑指offer题目前言数组(共12道题目):【剑指Offer】6、旋转数组的最小数字 前言   主要对这66道题做一个总结,整体来看,这66道题,涉

sea_bi的博客 370
上一篇: va_start和va_end
下一篇: 剑指Offer--链表-从尾到头打印链表C
ldxFashion
博客等级 码龄6年 0粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值