博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[百度]数组A中任意两个相邻元素大小相差1,在其中查找某个数
阅读量:5916 次
发布时间:2019-06-19

本文共 1037 字,大约阅读时间需要 3 分钟。

一.问题来源及描述

  今天看了July的微博,发现了七月问题,有这个题,挺有意思的。

  数组A中任意两个相邻元素大小相差1,现给定这样的数组A和目标整数t,找出t在数组A中的位置。如数组:[1,2,3,4,3,4,5,6,5],找到4在数组中的位置。

二.算法分析及实现

  这道题目最差时间复杂度也是O(N)(递增或者递减的情况),所以重点在于能不能找到一种尽可能减少比较次数的方法。如数组:[1,2,3,4,3,4,5,6,5],找到4在数组中的位置。4和1比较,差为3,那么即使最好情况(递增或者递减),4也就是在a[3]的位置,可以跳过a[1]a[2]。这样在特定数组(目标值和a[1]相差很大)的情况下或许可以节省时间。 

  所以得出规律:对于目标t,由当前位置a[i]比较开始,下一个可能位置为i = abs(a[i]-t)。

public class Solution {    public static Vector
ve = new Vector
(); public static void Find(int num[], int n, int target) { if (n <= 0) return; for (int i = 0; i < n; ) { if (num[i] == target) { ve.add(i); i += 2; } else i += Math.abs(num[i] - target); } return; } public static void main(String args[]) { ve.clear(); int num[] = {1, 2, 3, 2, 3, 4, 3, 2, 3}; int target = 4; Find(num, num.length, target); for (int i : ve) System.out.println(i + " "); }}

  为什么+2?比如"4,3,4"。+1肯定不是。

转载地址:http://pkzvx.baihongyu.com/

你可能感兴趣的文章
集团企业信息化参考一
查看>>
RedHat Linux 下安装MPlayer 编译源代码方式
查看>>
一个排序算法的解析
查看>>
【HDU】1848 Fibonacci again and again
查看>>
老鸟的Python新手教程
查看>>
关于前端开发的20篇文档与指南
查看>>
程序员保持快乐活跃的6个好习惯(转)
查看>>
【转】linux /usr/bin/ld cannot find 解决
查看>>
T-SQL技术收集——删除重复数据
查看>>
SQL中各数据类型的长度、精度
查看>>
webpack-dev-server
查看>>
python发送邮件
查看>>
DIY一个自己的音乐播放器
查看>>
golang使用protobuf
查看>>
安卓开源项目周报0315
查看>>
少年,你想在vue的世界里掌控雷电吗,没错,看这个分享就对了!
查看>>
安装Yaconf
查看>>
Agora iOS SDK-快速入门
查看>>
python-url显示方法
查看>>
响应式开发网站
查看>>