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

相关文章

关于百度map API for Android的mobile ak 102错误

一共有三个sha1值需要比对: 第一个是 sha1值是http://developer.baidu.com/map/sdkandev-14.htm 里面获得的sha1值(包括里面的cmd和界面的两种获取sha1值得方法) 第二个是 sha1值是打包好apk文件中META-INF 文件夹的CERT.RSA中的sha1值。http://bbs.lbsyun.baidu.com/vi

Swift 字典数组元组的使用 - 2022年11月更新

Swift 字典数组元组的使用 一、字典 Swift 字典用来存储无序的相同类型数据的集合,Swift 字典会强制检测元素的类型,如果类型不同则会报错。Swift 字典的key没有类型限制可以是整型或字符串,但必须是唯一的。let 修饰的字典为不可变字典,var 修饰的字典为可变字典。 1.1 字典的创建和取值 let dict = ["name":"张三","age":"20","add

iOS 数组排序

##1、字母排序 NSArray *arrData = @[@"i",@"b",@"a",@"d",@"e",@"f",@"g",@"h",@"c"];NSArray *sortArray = [arrData sortedArrayUsingSelector:@selector(compare:)];NSLog(@"%@",sortArray); 输出结果: ##2、数字排序

前端JS必用工具【js-tool-big-box】学习,检测当前是否为手机端浏览器,检测某元素是否处于当前可视范围内

这一小节,js-tool-big-box工具库又迎来了两个非常实用功能成员,分别是检测当前浏览器是否为手机端浏览器,还有检测某元素当前是否处于可视范围内。 1 安装引入 通过npm安装,执行以下命令 npm i js-tool-big-box 这两个功能,工具库提供了一个叫browserBox的对象,所以代码中需要引入这个对象 import { browserBox } from

【坑】如何让块元素像内联元素那样并排显示

我们知道在添加块元素(例如div等)会在块元素后面自动的添加一个换行,使得后面的内容显示在这个块元素的后面,可如果我们需要将几个块元素并列的时候(相互参差的div)可怎么办呢? 例如: <style type="text/css">#one {background-color:red;width:100px;height:100px;}#two {background-color:g

VBA数组循环

For i = 1 To UBound(arr)NextPublic Function 数组连接(arr, brr) '将arr,brr数组连接起来返回新数组Dim i&, j&, crrReDim crr(1 To UBound(brr) - LBound(brr) + UBound(arr) - LBound(arr) + 2)For i = LBound(arr) To UBound

02 LeetCode-- 反转数组的两种方式、

反转数组 创建新数组 首尾交换

【面试干货】一个数组的倒序

【面试干货】一个数组的倒序 1、实现思想2、代码实现 💖The Begin💖点点关注,收藏不迷路💖 1、实现思想 创建一个新的数组,然后将原数组的元素按相反的顺序复制到新数组中。 2、代码实现 package csdn;public class reverse {public static void main(String[] args) {int[] a

数组工具

Arrays是一个数组的工具类 提供如下方法 Arrays.binarySearch(int[]); // 二分查找数组必须有序Arrays.sort(int[]); // 数组排序,如果数组元素时对象,则必须实现Comparable接口Arrays.toString(int[]) // 将数组变成字符串Arrays.copyOf(int[] ,length); // 复制数组A

lintcode 旋转数组的最小数字

假设一个旋转排序的数组其起始位置是未知的(比如0 1 2 4 5 6 7 可能变成是4 5 6 7 0 1 2)。 你需要找到其中最小的元素。 数组中可能存在重复的元素。 想法:二分查找变形,最小数字一定是最大值后面的那个。当[11101],[1,0,1,1,1]时没办法判断,顺序查找。 class Solution { public: /** * @param num: the r