查找——相邻元素差的绝对值都是1的数组当中的某个数,百度笔试题

2024-05-07 18:18

本文主要是介绍查找——相邻元素差的绝对值都是1的数组当中的某个数,百度笔试题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目是这样的:

有这样一个数组A,大小为n,相邻元素差的绝对值都是1,如A={4,5,6,5,6,7,8,9,10,9}。现在给定数组A和目标整数t,请找到t在数组中的位置。

嗯,看到这个题目,想了一会儿,然后又想到《剑指offer》当中学到的分析问题的方法,那就是不管遇到什么题,举一两个例子,慢慢就可以看出规律了。于是乎就试验了一把这道题,不出所料,试了两步就想出了方法。

思路是这样的:假如我们要查找9,即t=9,然后我想的是,从数组第一个数开始,A[0]=4,那么t-A[0]=5,那么第二步再计算t-A[5]=2,此时5+2=7,A[7]就是目标数9了!因此这个方法就是从A[0]开始,然后逐步根据target与A[i]的差,来更新i,i=i+abs(target-A[i]),直到target在A[i]中找到。那么找不到的情况呢,那就是i会超过数组的长度,此时也是循环退出的时候。补充,此时i有可能大于length,也有可能小于0,比如当target取1的时候, i=i+1-4,此时i=-3,呵呵,对吧,i就跑到数组“左边”去了,也超出了数组范围,这个当时没有考虑清楚,这里加上。

分析:时间复杂度应该是常数级别的。

分享下代码:

// FindABSofSub_isOne_Array.cpp : 定义控制台应用程序的入口点。
/*@mishidemudong@2015-5-28\23:20*/
//#include "stdafx.h"
#include"math.h"
bool Find;
int FindABSofOne(int *a, int length, int target)
{if (a == NULL&&length < 0)Find = false;int i = 0;while (i <=length-1&&i >=0){if (a[i] == target){Find = true;return i;}else{i =i+ abs(target - a[i]);}}if (i > length|| i < 0)Find=false;
}int _tmain(int argc, _TCHAR* argv[])
{int A[11] = { 4, 5, 6, 5, 6, 7, 8, 9, 10, 9 ,8};int B[12] = { 6, 5, 4, 3, 2, 1, 2, 3, 2, 3, 4, 5  };int target = 0;int coordinate;printf("The Array is:\n");for (auto c : A)printf("%d, ", c);printf("\nWhich number do you want to search ?Condition thar the number is in the Array.\n");scanf_s("%d", &target);coordinate = FindABSofOne(A, 11, target);switch (Find){case false:printf("Sorry,the number you input is not in this Array"); break;case true:printf("Congratulations,the number you input is the %dth number of this Array",coordinate+1); break;}return 0;
}




这篇关于查找——相邻元素差的绝对值都是1的数组当中的某个数,百度笔试题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/968026

相关文章

JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法

《JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法》:本文主要介绍JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法,每种方法结合实例代码给大家介绍的非常... 目录引言:为什么"相等"判断如此重要?方法1:使用some()+includes()(适合小数组)方法2

GSON框架下将百度天气JSON数据转JavaBean

《GSON框架下将百度天气JSON数据转JavaBean》这篇文章主要为大家详细介绍了如何在GSON框架下实现将百度天气JSON数据转JavaBean,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录前言一、百度天气jsON1、请求参数2、返回参数3、属性映射二、GSON属性映射实战1、类对象映

C#高效实现Word文档内容查找与替换的6种方法

《C#高效实现Word文档内容查找与替换的6种方法》在日常文档处理工作中,尤其是面对大型Word文档时,手动查找、替换文本往往既耗时又容易出错,本文整理了C#查找与替换Word内容的6种方法,大家可以... 目录环境准备方法一:查找文本并替换为新文本方法二:使用正则表达式查找并替换文本方法三:将文本替换为图

Python中高级文本模式匹配与查找技术指南

《Python中高级文本模式匹配与查找技术指南》文本处理是编程世界的永恒主题,而模式匹配则是文本处理的基石,本文将深度剖析PythonCookbook中的核心匹配技术,并结合实际工程案例展示其应用,希... 目录引言一、基础工具:字符串方法与序列匹配二、正则表达式:模式匹配的瑞士军刀2.1 re模块核心AP

Java中数组与栈和堆之间的关系说明

《Java中数组与栈和堆之间的关系说明》文章讲解了Java数组的初始化方式、内存存储机制、引用传递特性及遍历、排序、拷贝技巧,强调引用数据类型方法调用时形参可能修改实参,但需注意引用指向单一对象的特性... 目录Java中数组与栈和堆的关系遍历数组接下来是一些编程小技巧总结Java中数组与栈和堆的关系关于

把Python列表中的元素移动到开头的三种方法

《把Python列表中的元素移动到开头的三种方法》在Python编程中,我们经常需要对列表(list)进行操作,有时,我们希望将列表中的某个元素移动到最前面,使其成为第一项,本文给大家介绍了把Pyth... 目录一、查找删除插入法1. 找到元素的索引2. 移除元素3. 插入到列表开头二、使用列表切片(Lis

Java中的数组与集合基本用法详解

《Java中的数组与集合基本用法详解》本文介绍了Java数组和集合框架的基础知识,数组部分涵盖了一维、二维及多维数组的声明、初始化、访问与遍历方法,以及Arrays类的常用操作,对Java数组与集合相... 目录一、Java数组基础1.1 数组结构概述1.2 一维数组1.2.1 声明与初始化1.2.2 访问

MySQL中查找重复值的实现

《MySQL中查找重复值的实现》查找重复值是一项常见需求,比如在数据清理、数据分析、数据质量检查等场景下,我们常常需要找出表中某列或多列的重复值,具有一定的参考价值,感兴趣的可以了解一下... 目录技术背景实现步骤方法一:使用GROUP BY和HAVING子句方法二:仅返回重复值方法三:返回完整记录方法四:

C# 比较两个list 之间元素差异的常用方法

《C#比较两个list之间元素差异的常用方法》:本文主要介绍C#比较两个list之间元素差异,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 使用Except方法2. 使用Except的逆操作3. 使用LINQ的Join,GroupJoin

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优