Chinaunix首页 | 论坛 | 博客
  • 博客访问: 988050
  • 博文数量: 150
  • 博客积分: 3017
  • 博客等级: 少校
  • 技术积分: 3829
  • 用 户 组: 普通用户
  • 注册时间: 2011-11-19 14:40
个人简介

Now in Baidu WISE team

文章分类

全部博文(150)

文章存档

2014年(8)

2013年(31)

2012年(111)

分类: Python/Ruby

2012-06-06 11:21:21

简单题。 复杂度为log2 n.
 
迭代代码:

点击(此处)折叠或打开

  1. my @input = qw/1 2 3 3 4 5 6 7 8/;
  2. my $tar = 3;
  3. my $start = 0;
  4. my $end = 8;
  5. my $cursor = 0 ;
  6. while(1){
  7.  $cursor = int(($start+$end)/2);

  8.  if($tar>$input[$cursor]+0){
  9.      $start = $cursor;
  10.      next;
  11.  }
  12.  if($tar<$input[$cursor]+0){
  13.      $end = $cursor;
  14.      next;
  15.  }
  16.  while($tar== $input[$cursor-1]+0){
  17.      $cursor--;
  18.  }
  19.  last;
  20. }
  21. print $cursor;

递归代码:

点击(此处)折叠或打开

  1. my @input = qw/1 2 3 3 4 5 6 7 8/;

  2. my $tar = 3;
  3. my $istart = 0;
  4. my $iend = @input -1 ;

  5. sub rbs{
  6.     my ($start, $end) = @_;
  7.     my $cursor = int(($start+$end)/2);

  8.     if($tar>$input[$cursor]+0){
  9.         $start = $cursor;
  10.         return rbs($start, $end);
  11.     }
  12.     if($tar<$input[$cursor]+0){
  13.         $end = $cursor;
  14.         return rbs($start, $end);
  15.     }
  16.     while($tar== $input[$cursor-1]+0){
  17.         $cursor--;
  18.     }
  19.     return $cursor;
  20. }

  21. print rbs($istart, $iend);

阅读(637) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~