笔试:最少再出几道题?补充题目

本文介绍了一种通过遍历和调整有序数组来解决特定问题的算法实现。该算法首先对输入数组进行排序,然后逐一检查相邻元素之间的差值,并根据这些差值决定如何调整数组以满足条件。具体来说,当相邻元素差值在一定范围内时,会采用不同的移动和补充策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天笔试遇到,记录下


import java.util.*;


/**
 * @author XF
 * 排序后,从小到大遍历。
 * 第二个数与第一个差值<=10,10< && <=20,20<
 * 根据各自的情况,进行补充和移动数组指针
 */
public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int[] ls = new int[n];
		for(int i=0; i<n; i++){
			ls[i] = sc.nextInt();
		}
		Arrays.sort(ls);  //排序,从小到大
		int result=0;
		for(int i=0; i<n; i++){
			int temp =  ls[i];
			if(i==n-1){   //避免数组越界,单独检测最后两个元素
				result+=2;
				break;
			}
			if(i == n-2){
				if(ls[n-1]-ls[n-2]<=20){
					result +=1;
				}else {
					result += 4;
				}
				break;
			}
			if(ls[i+1]-temp<=10){ //第二个数差值小于等于10
				if(ls[i+2]-ls[i+1]<=10){//第三个数差值小于等于10,数组已使用元素向前移动一位
					i++;
				}else{
					result++;
				}
				i++;
			}else if(ls[i+1]-temp>10 && ls[i+1]-temp<=20){//第二个数差值小于等于20,大于10
				result++;
				i++;
			}else{   //大于20
				result +=2;
				
			}
		}
		System.out.println(result);
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值