Колькасць студэнтаў, якія выконваюць хатняе заданне ў пэўны час Рашэнне штрых-кода


Узровень складанасці Лёгка
масіў

Праблема Колькасць студэнтаў, якія робяць дамашняе заданне ў вызначаны час Рашэнне Leetcode прапануе нам знайсці колькасць студэнтаў, якія працуюць над хатнімі заданнямі ў пэўны час. Праблема вельмі зразумелая, сам загаловак ужо здольны растлумачыць усю праблему. Нам даецца час запыту і час, калі студэнты працуюць над хатнімі заданнямі. Такім чынам, выкарыстоўваючы гэтую інфармацыю, нам прапануецца знайсці колькасць студэнтаў, якія выконваюць хатнія заданні падчас запыту. Такім чынам, як звычайна перад непасрэдным скачком у раствор. Давайце праверым некалькі прыкладаў.

Колькасць студэнтаў, якія выконваюць хатняе заданне ў пэўны час Рашэнне штрых-кода

startTime = [1,2,3], endTime = [3,2,7], queryTime = 4
1

Тлумачэнне: У нас ёсць тры студэнты, з якіх толькі 1 студэнт працуе над хатнімі заданнямі падчас запыту. Таму што ёсць толькі адно дзіця, якое пачынае хатняе заданне ў час = 3, а выконвае ў час = 7.

startTime = [4], endTime = [4], queryTime = 4
1

Тлумачэнне: У нас ёсць адзін студэнт, які пачынае хатняе заданне адначасова з заданнем. Такім чынам, выхад таксама роўны 1.

Падыход да колькасці студэнтаў, якія выконваюць хатняе заданне ў вызначаны час

Праблема папрасіла нас знайсці колькасць студэнтаў, якія працуюць над хатнімі заданнямі падчас запыту. Нам прадастаўляюцца час пачатку і заканчэння хатніх заданняў студэнтаў у выглядзе вектара альбо масіў. Выкарыстоўваючы гэтую інфармацыю, мы спрабуем знайсці неабходнае значэнне.

Мы можам лёгка вырашыць праблему, проста абышоўшы дадзеную інфармацыю. Прыведзеная інфармацыя - час пачатку і заканчэння выканання хатняга задання. Такім чынам, мы правяраем, ці знаходзіцца час запыту паміж часам пачатку і заканчэння выканання хатняга задання. Падлік гэтых студэнтаў дае нам выніковы адказ.

Код колькасці студэнтаў, якія выконваюць хатняе заданне ў вызначаны час

Код C ++

#include <bits/stdc++.h>
using namespace std;

int busyStudent(vector<int> startTime, vector<int> endTime, int queryTime) {
    int n = startTime.size();
    int ans = 0;
    for(int i=0;i<n;i++)
        ans += ((startTime[i] <= queryTime && queryTime <= endTime[i]) ? 1 : 0);
    return ans;
}

int main(){
    vector<int> startTime = {4};
    vector<int> endTime = {4};
    int queryTime = 4;
    cout<<(busyStudent(startTime, endTime, queryTime));
}
1

Код Java

import java.util.*;
import java.lang.*;
import java.io.*;

class Main
{
  public static int busyStudent(int[] startTime, int[] endTime, int queryTime) {
        int n = startTime.length;
        int ans = 0;
        for(int i=0;i<n;i++)
            ans += ((startTime[i] <= queryTime && queryTime <= endTime[i]) ? 1 : 0);
        return ans;
    }
    
  public static void main (String[] args) throws java.lang.Exception
  {
    int[] startTime = {4};
    int[] endTime = {4};
    int queryTime = 4;
    System.out.println(busyStudent(startTime, endTime, queryTime));
  }
}
1

Аналіз складанасці

Складанасць часу

O (N), бо мы праходзім усе ўваходныя элементы. Такім чынам, складанасць часу аказваецца лінейнай.

Касмічная складанасць

O (1), таму што мы выкарыстоўваем толькі адну зменную для захоўвання падліку.