Chinaunix首页 | 论坛 | 博客
  • 博客访问: 65395
  • 博文数量: 115
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 10
  • 用 户 组: 普通用户
  • 注册时间: 2014-03-08 19:09
文章分类
文章存档

2015年(115)

我的朋友

分类: Python/Ruby

2015-08-06 16:51:22

简单题。 复杂度为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);

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