2021/03/08阿里在线笔试—题目一复盘

本文复盘2021年阿里在线笔试中的一道题目——找到数组中第k个缺失的正整数。通过分析原题和优化思路,采用二分法进行解决。讨论了二分法的关键点,并指出与LeetCode类似题目在计算k时的不同之处,即本题从数组第一个元素开始计数,而非从1开始。
摘要由CSDN通过智能技术生成

题目原生

        第一题:https://leetcode-cn.com/problems/kth-missing-positive-number/ 第 k 个缺失的正整数

        第二题:https://leetcode-cn.com/problems/profitable-schemes/  879. 盈利计划


题目一:

n张卡片,无重复值,升序排列,从第一张卡片的值开始第k个在卡片中未出现的正整数为多少,并进行返回

(leetcode原题目:一个严格升序排列的正整数数组arr和一个整数k,找到这个数组里第k个缺失的正整数。——相当于从1开始计算,不需要从第一张卡片的值开始计K)


首先从最原始的题目考虑,找到第k个缺失的正整数。最直接的方式就是枚举:

        用一个变量 current 表示当前应该出现的数,从 1 开始,每次循环都让该变量递增。用一个指针 pr 指向数组中没有匹配的第一个元素,每轮循环中将该元素和 current 进行比较,如果相等,则指针后移,否则指针留在原地不动,说明缺失正整数 current。用 missCount 变量记录缺失的正整数的个数,每次发现有正整数缺失的时候,该变量自增,并且记录这个缺失的正整数,直到找到第 k 个缺失的正整数。

import java.util.*;
import java.util.Scanner;

public class Main_1 {
	
	// n张卡片,无重复值,升序排列,想知道从第一张卡片的值开始第k个在卡片中未出现的正整数为多少,并进行
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值