小明找位置

小明找位置

问题

小朋友站队,按学号从小到大排成一列。小明来迟了,请你给小明出个主意,让他尽快找到他应该排的位置。算法复杂度要求不高于nLog(n); 学号为递增数列,队列规模<=10000;

输入描述:
1. 第一行: 输入已排成队列的小朋友的学号(正整数,以','隔开;
    例如: 93 95 97 100 102 123 155
2. 第二行: 小明的学号, 如110;

输出描述:
输出一个数字,代表排队位置(从1开始)。
例如:
6

示例1

输入
93 95 97 100 102 123 155
110

输出
6

题解

你可以使用二分查找法来实现这个问题,保证算法复杂度为 (O(\log n))。以下是用 Java 实现的代码:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // 读取第一行输入
        String[] strNumbers = scanner.nextLine().split(" ");
        int[] numbers = new int[strNumbers.length];
        for (int i = 0; i < strNumbers.length; i++) {
            numbers[i] = Integer.parseInt(strNumbers[i]);
        }
        
        // 读取第二行输入
        int xiaoMingNumber = scanner.nextInt();
        
        // 找到小明的位置
        int position = findPosition(numbers, xiaoMingNumber);
        
        // 输出位置
        System.out.println(position);
    }
    
    public static int findPosition(int[] numbers, int target) {
        int left = 0;
        int right = numbers.length - 1;
        
        while (left <= right) {
            int mid = left + (right - left) / 2;
            
            if (numbers[mid] == target) {
                return mid + 1;  // 找到目标值,返回位置,位置从1开始
            } else if (numbers[mid] < target) {
                left = mid + 1;
            } else {
                right = mid - 1;
            }
        }
        
        return left + 1;  // 没找到目标值,返回应该插入的位置,位置从1开始
    }
}

这个程序首先读取输入的学号队列和小明的学号,然后使用二分查找法找到小明应该排的位置,并输出结果。

代码说明

  1. 输入处理

    • 通过 Scanner 读取输入,将学号队列和小明的学号分别存储在数组和变量中。
  2. 二分查找

    • 使用 findPosition 方法来进行二分查找,如果找到小明的学号,返回对应的位置(从1开始)。
    • 如果没找到,返回应该插入的位置(从1开始)。
  3. 输出结果

    • 输出小明的排队位置。
小明是华为研究院新招收的一位实习生,他被分配到了OD部门进行机试。为了在华为展现自己的能力,小明决定加倍努力完成这次任务。 首先,小明非常清楚机试的重要性,因此他在机试前进行了充分的准备。他仔细研究了OD部门的相关技术和项目,深入了解了华为的技术实践和创新理念,以便能够更好地理解并面对题目。 其次,小明知道到一个适合自己的位置是提升自己表现的重要因素之一。在机试时,他紧紧抓住机会,迅速到了一个靠窗的位置。这个位置有利于他集中注意力,减少噪音干扰,提高工作效率。 在机试过程中,小明全身心地投入到任务中。他认真阅读每个题目,分析需求,并结合自己的理解进行解答。虽然有些题目复杂,但他不慌不忙,调整心态,用深入的思考和分析出最佳解决方案。 此外,小明还注重与身边的同事沟通和合作。机试期间,小明积极与同桌的小红交流,并互相提供意见和帮助。这种团队合作精神不仅让小明更好地理解题目,也使他们共同进步。 最后,小明机试后结合自身表现进行了总结和反思。他意识到自己在解答一个特定问题时可能存在的问题,并提出了相应的解决方案。他将这个经验放在实践中,并承诺在未来的工作中继续不断提升自己的能力。 总之,小明通过充分准备,到合适的位置,全身心地投入和合作,并进行总结和反思,充分展示了自己的能力和潜力。这次机试不仅让小明更加了解了华为,也为他未来成长和发展奠定了良好的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值