查找——相邻元素差的绝对值都是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

相关文章

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::

C++ Primer 多维数组的使用

《C++Primer多维数组的使用》本文主要介绍了多维数组在C++语言中的定义、初始化、下标引用以及使用范围for语句处理多维数组的方法,具有一定的参考价值,感兴趣的可以了解一下... 目录多维数组多维数组的初始化多维数组的下标引用使用范围for语句处理多维数组指针和多维数组多维数组严格来说,C++语言没

CSS3中使用flex和grid实现等高元素布局的示例代码

《CSS3中使用flex和grid实现等高元素布局的示例代码》:本文主要介绍了使用CSS3中的Flexbox和Grid布局实现等高元素布局的方法,通过简单的两列实现、每行放置3列以及全部代码的展示,展示了这两种布局方式的实现细节和效果,详细内容请阅读本文,希望能对你有所帮助... 过往的实现方法是使用浮动加

Java 字符数组转字符串的常用方法

《Java字符数组转字符串的常用方法》文章总结了在Java中将字符数组转换为字符串的几种常用方法,包括使用String构造函数、String.valueOf()方法、StringBuilder以及A... 目录1. 使用String构造函数1.1 基本转换方法1.2 注意事项2. 使用String.valu

在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码

《在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码》在MyBatis的XML映射文件中,trim元素用于动态添加SQL语句的一部分,处理前缀、后缀及多余的逗号或连接符,示... 在MyBATis的XML映射文件中,<trim>元素用于动态地添加SQL语句的一部分,例如SET或W

JAVA中整型数组、字符串数组、整型数和字符串 的创建与转换的方法

《JAVA中整型数组、字符串数组、整型数和字符串的创建与转换的方法》本文介绍了Java中字符串、字符数组和整型数组的创建方法,以及它们之间的转换方法,还详细讲解了字符串中的一些常用方法,如index... 目录一、字符串、字符数组和整型数组的创建1、字符串的创建方法1.1 通过引用字符数组来创建字符串1.2

vue如何监听对象或者数组某个属性的变化详解

《vue如何监听对象或者数组某个属性的变化详解》这篇文章主要给大家介绍了关于vue如何监听对象或者数组某个属性的变化,在Vue.js中可以通过watch监听属性变化并动态修改其他属性的值,watch通... 目录前言用watch监听深度监听使用计算属性watch和计算属性的区别在vue 3中使用watchE

百度/小米/滴滴/京东,中台架构比较

小米中台建设实践 01 小米的三大中台建设:业务+数据+技术 业务中台--从业务说起 在中台建设中,需要规范化的服务接口、一致整合化的数据、容器化的技术组件以及弹性的基础设施。并结合业务情况,判定是否真的需要中台。 小米参考了业界优秀的案例包括移动中台、数据中台、业务中台、技术中台等,再结合其业务发展历程及业务现状,整理了中台架构的核心方法论,一是企业如何共享服务,二是如何为业务提供便利。

hdu2241(二分+合并数组)

题意:判断是否存在a+b+c = x,a,b,c分别属于集合A,B,C 如果用暴力会超时,所以这里用到了数组合并,将b,c数组合并成d,d数组存的是b,c数组元素的和,然后对d数组进行二分就可以了 代码如下(附注释): #include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<que