أبطأ حل Leetcode مفتاح


مستوى الصعوبة سهل
كثيرا ما يطلب في أمازون
مجموعة

توفر لنا مشكلة Slowest Key Leetcode Solution سلسلة من المفاتيح التي تم الضغط عليها. نحن أيضا نمنح مجموعة أو ناقلات المرات التي تم فيها تحرير هذه المفاتيح. يتم إعطاء تسلسل المفاتيح في شكل سلسلة. لذا ، طلبت منا المشكلة العثور على أبطأ مفتاح ، والذي يستغرق وقتًا أطول للعمل. الوقت الذي يستغرقه المفتاح للعمل أو الكتابة هو الاختلاف في أوقات تحرير المفتاح الحالي والمفتاح السابق الذي تم الضغط عليه. في حال صادفنا مفتاحين أو أكثر يستغرقان نفس الوقت. لذلك نعيد المفتاح الذي هو الأكبر من حيث المعجم. قبل التعمق في الحل ، دعونا أولاً نلقي نظرة على بعض الأمثلة.

أبطأ حل Leetcode مفتاح

releaseTimes = [9,29,49,50], keysPressed = "cbcd"
"c"

توضيح: الوقت الذي يستغرقه كل مفتاح هو 9 ، 20 ، 20 ، 1. أوقات التحرير هذه للمفاتيح c و b و c و d على التوالي. نظرًا لأن أوقات إصدار المفتاحين b و c هي نفسها. نعيد أكبر مفتاح معجم وهو c.

نهج لحل أبطأ مفتاح Leetcode

تم بالفعل وصف مشكلة Slowest Key Leetcode Solution أعلاه. باختصار ، طلبت منا المشكلة العثور على المفتاح الذي يستغرق أطول نوع ليتم تنفيذه. في حالة حدوث ذلك ، يستغرق مفتاحان أو أكثر نفس القدر من الوقت للتنفيذ. ثم نحن مطالبون بإعادة أكبر مفتاح معجم. لحل المشكلة ، نقوم ببساطة بالمرور فوق المفاتيح التي تم الضغط عليها وتقييم وقت التحرير لكل مفتاح من المفاتيح. بالنسبة للمفتاح الأول ، يكون مساويًا لـ releaseTime [0] ، وبعد ذلك يكون ReleaseTime [i] - releaseTime [i-1]. لذلك نحتفظ بمتغيرين ، أحدهما يخزن الإجابة ، والآخر يخزن الوقت الذي يستغرقه تنفيذ هذا المفتاح.

ننتقل عبر المفاتيح ، ونقيم وقت الإصدار لكل منها. نقوم بتحديث الإجابة عندما نجد مفتاحًا يستغرق وقتًا أطول أو أكبر من الناحية المعجمية من الإجابة الحالية ويستغرق أيضًا نفس الوقت ليتم تنفيذه. في النهاية ، يتم إرجاع الإجابة إلى وظيفة الاستدعاء.

رمز لحل أبطأ مفتاح Leetcode

كود C ++

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

char slowestKey(vector<int>& releaseTimes, string keysPressed) {
    int time = releaseTimes[0];
    char ans = keysPressed[0];
    for(int i=1;i<keysPressed.length();i++){
        int cur_time = releaseTimes[i] - releaseTimes[i-1];
        if(cur_time >= time){
            if(cur_time > time)
                ans = keysPressed[i], time = cur_time;
            else
                ans = max(ans, keysPressed[i]);
        }
    }
    return ans;
}

int main(){
    vector<int> releaseTimes = {9, 29, 49, 50};
    string keysPressed = "cbcd";
    cout<<slowestKey(releaseTimes, keysPressed);
}
c

كود جافا

import java.util.*;
import java.lang.*;
import java.io.*;
 
class Main
{
  public static char slowestKey(int[] releaseTimes, String keysPressed) {
        int time = releaseTimes[0];
        char ans = keysPressed.charAt(0);
        for(int i=1;i<keysPressed.length();i++){
            int cur_time = releaseTimes[i] - releaseTimes[i-1];
            if(cur_time >= time){
                if(cur_time > time){
                    ans = keysPressed.charAt(i);
                    time = cur_time;
                }
                else
                    ans = ans > keysPressed.charAt(i) ? ans : keysPressed.charAt(i);
            }
        }
        return ans;
    }
 
  public static void main (String[] args) throws java.lang.Exception {
    int[] releaseTimes = {9, 29, 49, 50};
      String keysPressed = "cbcd";
      System.out.print(slowestKey(releaseTimes, keysPressed));
  }
}
c

تحليل التعقيد

تعقيد الوقت

O (N) لأنه اجتاز جميع المفاتيح المعطاة.

تعقيد الفضاء

يا (1) ، لأننا استخدمنا متغيرين إضافيين فقط لحل المشكلة.