定义有数组int a[200]={1,2,2,3,.....},数组元素都为正数,且a[i+1]>=a[i],请快速输出a[i]=i的数。

题目描述

定义有数组int a[200]={1,2,2,3,.....},数组元素都为正数,且a[i+1]>=a[i],请快速输出a[i]=i的数。

解题思路

对于本题,最简单的办法就是对数组进行顺序遍历,判断遍历到的数是否满足条件,这种方法的效率显然是最低的。

下面介绍另外一种方法,主要思路如下:

如果a[i]>i,则接下来的a[i]-i-1个数一定不可能满足a[i]=i,此时可以直接遍历下标为i+(arr[i]-i)的元素,从而减少了遍历的次数,实现代码如下:


import java.util.ArrayList;

public class Test10 {

	public static ArrayList<Integer> find(int[] arr) {
		ArrayList<Integer> result = new ArrayList<Integer>();
		for (int i = 0, j = arr.length - 1; i <= j;) {
			if (arr[i] == i) {
				result.add(i++);
			} else if (arr[i] > i) {
				i = i + (arr[i] - i);
			} else {
				i++;
			}
		}
		return result;

	}

}

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值