阿里笔试7/29 9-10点场

第一题

给 n 个恐龙蛋及恐龙蛋的大小,按从大到小排列,第 i 个恐龙蛋每天增大 i,问最少几天会出现两个同样大小的恐龙蛋。

解题思路

数组问题。题目等价于给定一个从大到小排列好的数组,求相邻两个数字之间的最小差。

Java代码

	//n是恐龙蛋的数量
	int[] nums=int[n];
	int min=nums[0];
	for(int i=1;i<n;i++){
		min=Math.min(nums[i-1]-nums[i],min);
	}
	//返回答案
	return min;

第二题

n 个客栈依次排列,给出 n - 1 条路的权重。从任意一处出发,每走过一条路,该路的权重减 1,但得到 1 点利益。不能走权重为 0 的路。求最大利益。

解题思路

数组问题。找规律。中间路径如果是奇数都可以通过“反复横跳”全部走完,如果是偶数则只能去,不能回。对于首位的偶数,则可以选择从第二点出发,末位的偶数也可以去了再返回。如果首位是偶数,并且之后也是偶数,则可以从第一个不是偶数的点返回至首位再回去,所以需要进行处理。

Java代码

	//n是客栈的数量
	int[] nums=int[n];
	int ans=0;
	//对数组进行预处理,把首尾的相连偶数都算进答案
	//处理首位相连偶数
	int j=0;
	while(j+1<n && nums[j]%2==0 && nums[j+1]%2==0){
		nums[j]--;
		ans++;
		j++;
	}
	//处理末位相连偶数
	j=n-1;
	while(j>1 && nums[j]%2==0 && nums[j-1]%2==0){
		nums[j]--;
		ans++;
		j--;
	}
	for(int i=0;i<n;i++){
		if(nums[i]%2==1){
			//奇数直接加
			ans+=nums[i];
		}else{
			//中间偶数要-1
			ans+=nums[i]-1;
		}
	}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值