📣 独立日限时特惠: VIP通行证立减$68
123
返回列表 发新帖
楼主: edussx
跳转到指定楼层
上一主题 下一主题
收起左侧

用递归求数组最大值的位置

🔗
GTea 2013-8-13 11:12:30 | 只看该作者
全局:
本帖最后由 GTea 于 2013-8-13 11:18 编辑

  1. public int getMaxIndex(int[] array) {
  2.         if (array == null) {
  3.                 return -1;
  4.         }

  5.         int maxIndex = getMaxIndexRecursive(array, array.length - 1);

  6.         return maxIndex;
  7. }

  8. private int getMaxIndexRecursive(int[] array, int lastIndex) {
  9.         int maxIndex;

  10.         if (lastIndex < 0) {
  11.                 maxIndex = -1;
  12.         } else if (lastIndex == 0) {
  13.                 maxIndex = lastIndex;
  14.         } else {
  15.                 int subMaxIndex = getMaxIndexRecursive(array, lastIndex - 1);
  16.                 maxIndex = array[subMaxIndex] >= array[lastIndex] ? subMaxIndex : lastIndex;
  17.         }

  18.         return maxIndex;
  19. }
复制代码
检查边界条件:数组为null,或者index为负的情况下,返回-1
回复

使用道具 举报

🔗
GTea 2013-8-13 11:19:14 | 只看该作者
全局:
crazyai 发表于 2013-8-7 12:53
这个复杂度是O(n)的吧,T(n)=2T(n/2)+O(1),由主定理得O(n)
从另一方面想,从无序数组中找到最大值下标, ...

我也觉得应该是O(n)
回复

使用道具 举报

🔗
baojialiang 2013-9-14 07:23:05 | 只看该作者
全局:
        public static int findIndex(int[] data, int i){
                if(data.length - 1 == i)
                        return i;
                int preMaxIndex = findIndex(data, i + 1);
                return data[i] > data[preMaxIndex] ? i : preMaxIndex;
        }

回复

使用道具 举报

🔗
our2008 2013-9-16 21:00:13 | 只看该作者
全局:
int max(const int a[], int n)
{
    assert(n > 0);
    if (n == 1)
        return 0;
    int preMax = max(a, n - 1);
    return a[n - 1] > a[preMax] ? n - 1 : preMax;
}
int main()
{
    int a[5] = {1,3,5,7,9};
    cout << max(a,sizeof(a)/sizeof(a[0])) << endl;
    return 0;
}
我的思想是先遍历前n-1个元素,再与当前元素比较。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表