1d Array Leetcode həllinin cəmi

Çətinlik səviyyəsi Asan
Tez-tez soruşulur Çiy kərpic Amazon alma Bloomberg Über
alqoritmlər Geyim kodlaşdırma müsahibə müsahibə hazırlığı LeetCode LeetCodeSolutionsBaxılıb 104

Sistem dizaynı ilə bağlı müsahibə sualları o qədər açıq ola bilər ki, düzgün hazırlaşmağı bilmək çox çətindir. İndi satın aldıqdan sonra Amazon, Microsoft və Adobe-nin dizayn dövrlərini sındıra bilirəm Bu kitabı. Gündəlik bir yenidən nəzərdən keçirin dizayn sualı və söz verirəm ki, dizayn dövrünü sındıra bilərsiniz.

Problem bəyanat

1d cəmdə array problem bizə bir sıra nömrələri verildi ki, bunun üçün bir sıra qaytarmalıyıq, burada hər bir indeks üçün nəticə massivindəki arr [i] = cəmi (nums [0]… nums [i]).

misal

 nums = [1,2,3,4]
[1,3,6,10]

Explanation:

Qaçış cəmi: [1, 1 + 2, 1 + 2 + 3, 1 + 2 + 3 + 4] = [1, 3, 6, 10]

nums = [1,1,1,1,1]
[1,2,3,4,5]

Explanation:

İşləyən cəmi: [1, 1 + 1, 1 + 1 + 1, 1 + 1 + 1 + 1, 1 + 1 + 1 + 1 + 1] = [1, 2, 3, 4, 5]

Yanaşma

Bu problemdə i indeksindəki elementin dəyərinin verilmiş massivdəki 1-dən ith indeksli elementə qədər olan elementlərin cəminə bərabər olacağı bir sıra yaratmalıyıq.
Bunun üçün sadəcə verilmiş sıra ölçüsünə bərabər bir ölçü massivi yarada bilərik. Sonra for for-dakı hər bir element üçün loop üçün başqa birini istifadə edərək orijinal dizidəki indeksə 0-dən element əlavə edə bilərik. Bu alqoritmin zaman mürəkkəbliyi O (n ^ 2) olacaqdır.

Yalnız tək istifadə edərək bu problem üçün zaman mürəkkəbliyini azalda bilərik loop.
nums verilmiş bir sıra olsun və res işləyən cəmi saxladığımız bir sıra olsun, onda res [i] -ni aşağıdakı kimi hesablaya bilərik:

res [i] = res [i-1] + nums [i].

misal: nums = [1,2,3,4] aşağıdakı şəkildə göstərilmişdir,

1d Array Leetcode həllinin cəmiPin

Beləliklə, əvvəlki cild indeksində saxlanılan indeksə qədər cəm aldığımız üçün yenidən prefiks cəmini hesablamaq üçün for döngüsünün işləməməsinə ehtiyac yoxdur.

Həyata keçirilməsi

1d Array Leetcode həllinin cəmi üçün C ++ proqramı

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

vector<int> runningSum(vector<int>& nums) 
{
    vector<int> res(nums.size());
    if(nums.size()==0) return res;

    res[0]=nums[0];
    for(int i=1;i<nums.size();i++)
    {
        res[i]=res[i-1]+ nums[i];
    }

    return res;

}

int main() 
{
  vector<int> nums={1,2,3,4};
  vector<int> res= runningSum(nums);
  
  cout<<"[";
  
  for(int i=0;i<res.size()-1;i++) cout<<res[i]<<",";
  
  cout<<res.back()<<"]"<<endl;

  return 0; 
}
[1,3,6,10]

1d Array Leetcode həllinin cəminin işlənməsi üçün Java proqramı

import java.lang.*;

class Rextester
{  
    public static int[] runningSum(int[] nums) 
    {
        int[] res= new int[nums.length];
        if(nums.length==0) return res;

        res[0]=nums[0];
        for(int i=1;i<nums.length;i++)
        {
            res[i]=res[i-1]+ nums[i];
        }

        return res;
    }
    
    public static void main(String args[])
    {
        int nums[]={1,2,3,4};
        int res[]= runningSum(nums);

        System.out.print("[");

        for(int i=0;i<res.length-1;i++) System.out.print(res[i]+",");

        System.out.println( res[res.length-1] + "]");
        
    }
}
[1,3,6,10]

1d Array Leetcode Solüsyonunun İşlənən Cəmi üçün Mürəkkəblik Analizi

Zamanın mürəkkəbliyi

O (n): burada n verilən massivin ölçüsüdür. Döngü üçün yalnız bir ədəd işlədiyimiz üçün zamanın mürəkkəbliyi xətti olacaqdır.

Kosmik Mürəkkəblik 

O (n): Burada n ölçülü bir nəticə massivi yaradırıq. Beləliklə kosmik mürəkkəblik də xətti olacaqdır.

Crack Sistemi Dizayn Müsahibələri
Translate »