בלאט 2 פון 2
Solution 7 & 8
נשלח: דינסטאג נאוועמבער 17, 2020 8:12 am
דורך יוניווערסיטי_בחור
Solution #7
קוד: וועל אויס אלע
public static int solution(int A, int B, int K)
{
if (K > B && A > 0)
return 0;
else
if (K > B) return 1;
long count = 0; for (int i = B; i >= A; i--) {
if (i % K == 0) {
count = (((long)(i - A)) + K) / K; break;
}
}
return (int)count;
}
Solution #8
קוד: וועל אויס אלע
public static int solution(int[] A)
{
HashSet<int> hs = new HashSet<int>();
var B = A.OrderBy(i => i).ToArray();
var startInd = Array.IndexOf(B, B.Where(i => i > 0).Count() > 0 ? B.First(i => i > 0) : 1); if (startInd < 0) return 1; ;
for (int j = startInd; j < A.Length; j++)
hs.Add(B[j]); int e = 1;
while (hs.Contains(e))
{
e++;
}
return e;
}
Problem #9
נשלח: זונטאג נאוועמבער 29, 2020 2:00 pm
דורך יוניווערסיטי_בחור
Problem #9
נאך איינס פון די שווערערע.
א דנ"א סיקווענס קען ווערן רעפרעזענטירט דורך א סטרינג פון א סיקווענס פון איינע, עטליכע אדער אלע פון די פאלגנדע לעטטערס A, C, G און T. יעדע פון די לעטטערס זענען אסאציאירט מיט אן אימפאקט פאקטאר פון 1,2,3,4 רעספעקטיוולי. דו וועסט שרייבן א פונקשן וואס וועט ענטפערן א רייע פראגן/קוועריס, אלע פון די פארעם פון, וואס איז די נידריגסטע אימפאקט פאקטאר וואס דו קענסט טרעפן אין א געוויסע פארשן (פארציע) אין די דנ"א סיקווענס.
שרייב א פונקשן public int[] solution(String S, int[] P, int[] Q) וואס באקומט א סטרינג S אלס די דנ"א סיקווענס, אנטהאלטנדיג די לעטטערס S[0] S[1]...S[N-1]. די פונקשן וועט אויך באקומען צוויי אררעיס P און Q פון M אינטעדזשערס, וואס צוזאמען רעפרעזענטירן די קוועריס וואס מ'ברויך ענטפערן אויף S. פאר יעדע Kth אינדעקס אין P[K] און Q[K], די ציהל איז צו ענטפערן וואס איז די מינימאל אימפאקט פאקטאר אין די דנ"א סטרינג S צווישן פאזיציעס Q[K] און P[K] אינקלוסיוו. ד.ה. צווישן S[Q[K]] און S[P[K]]. מ' ועד בכלל. די פונקשן זאל צוריקגעבן אן אררעי מיט א ליסט פון די פאזיציעס צו יעדע פון די קוועריס. למשל:
אז דו באקומסט די סטרינג CAGCCTA און אררעיס P און Q אזוי אז:
P[0] = 2 Q[0] = 4
P[1] = 5 Q[1] = 5
P[2] = 0 Q[2] = 6
וועט די ענטפער זיין אין דער ארדער:
- צווישן פאזיציע 2 און 4, געפינט זיך די סטרינג GCC, איז די ענטפער 2.
- צווישן פאזיציע 5 און 5 געפינט זיך בלויז T, וועמענס אימפאקט פאקטאר איז 4, אלזא איז די ענטפער 4.
- צווישן פאזיציע 0 און 6, געפינט זיך די גאנצע סטרינג, איז די ענטפער 1.
סאוי, די פונקשן געבט צוריק [2,4,1].
די פונקשן זאל נישט האבן א ראן טיים לענגער פון (n)0.
Solution #9
נשלח: מאנטאג נאוועמבער 30, 2020 1:07 pm
דורך יוניווערסיטי_בחור
איך האב שוין געטראפן א דזשאב במילא ווייס איך נישט וויפיהל צייט איך וועל האבן צו ווייטער ממשיך זיין און ס'זעט אויך נישט אויס אז איינער חוץ [tag]מי אני[/tag] איז אינטרעסירט אבער פאר מיין אייגענע טובה, צו בלייבן שארף, וועל איך פרובירן פון צייט צו צייט צו פאוסטן.
Solution #9
באזירט אויף Prefix sums method, א קאנצעפט דעסקרייבד דא:
https://codility.com/media/train/3-PrefixSums.pdfדי עקשועל [עפישענט] סעלושן האב איך נישט געקענט אויספיגערן ביז איך האב געקוקט דא:
https://stackoverflow.com/questions/195 ... ange-queryמיין סעלושן איז בעיסיקלי די ערשטע ענטפער אין דער טרעד^ נאר כ'האב גענוצט א צווייטע דאטא סטרוקטור און מיט א סלייטלי דיפערענט צוגאנג.
קוד: וועל אויס אלע
public static int[] solution(string S, int[] P, int[] Q)
{
List<Tuple<int, int, int>> prefixSums = new List<Tuple<int, int, int>>() { Tuple.Create(0, 0, 0) };
int[] minimalIF = new int[P.Length];
var i = 0;
foreach (var ch in S)
{
Console.WriteLine(prefixSums.Count());
switch (ch) {
case 'A':
prefixSums.Add(Tuple.Create(1 + prefixSums.ElementAt(i).Item1, prefixSums.ElementAt(i).Item2, prefixSums.ElementAt(i).Item3));
break;
case 'C':
prefixSums.Add(Tuple.Create(prefixSums.ElementAt(i).Item1, 1 + prefixSums.ElementAt(i).Item2, prefixSums.ElementAt(i).Item3));
break;
case 'G':
prefixSums.Add(Tuple.Create(prefixSums.ElementAt(i).Item1, prefixSums.ElementAt(i).Item2, 1 + prefixSums.ElementAt(i).Item3));
break;
default:
prefixSums.Add(Tuple.Create(prefixSums.ElementAt(i).Item1, prefixSums.ElementAt(i).Item2, prefixSums.ElementAt(i).Item3));
break;
}
i++;
}
foreach (var p in prefixSums)
Console.WriteLine(p);
for (int j = 0; j < P.Length; j++) {
if (prefixSums.ElementAt(Q[j] + 1).Item1 - prefixSums.ElementAt(P[j]).Item1 > 0)
minimalIF[j] = 1;
else if (prefixSums.ElementAt(Q[j] + 1).Item2 - prefixSums.ElementAt(P[j]).Item2 > 0)
minimalIF[j] = 2;
else if (prefixSums.ElementAt(Q[j] + 1).Item3 - prefixSums.ElementAt(P[j]).Item3 > 0)
minimalIF[j] = 3;
else
minimalIF[j] = 4;
}
return minimalIF;
}
נשלח: מיטוואך דעצעמבער 02, 2020 4:52 am
דורך יוניווערסיטי_בחור
Problem #10
דו באקומסט אן אררעי A מיט N אינטעדזשערס. א פארל (pair) פון אינטעדזשערס (P,Q) אזוי אז P>=0, Q>P, N>Q, ווערט אנגערופן א סלייס פון אררעי A. (א סלייס קען נישט האבן ווינציגער פון צוויי עלעמענטס.) די עווערידזש פון א סלייס איז די סומע פון די סלייס A[P] + A[P + 1] + ... + A[Q] דעוויידעד ביי די לענג פון די סלייס. סאוי, (Q − P + 1) / (A[P] + A[P + 1] + ... + A[Q]) (היות אין קאמפיוטינג גייען מיר אייביג לויט די 0 בעיסד אינדעקס). לדוגמה, אויב אררעי A זעהט אויס אזוי:
A[0] = 4
A[1] = 2
A[2] = 2
A[3] = 5
A[4] = 1
A[5] = 5
A[6] = 8
זענען דא אין אררעי A, צווישן אנדערע, די פאלגענדע סלייסעס:
סלייס (2, 1) וועמענס עווערידזש איז -> 2 = 2 / (2 + 2)
סלייס (4, 3) וועמענס עווערידזש איז -> 3 = 2 /(5 + 1)
סלייס (4, 1) וועמענס עווערידזש איז -> 2.5 = 4 / (2 + 2 + 5 + 1)
די גאול איז צו טרעפן די ערשטע (אדער אנהויבענדיגע) פאזיציע פון א סלייס וועמענס עווערידזש איז די קלענסטע פון צווישן אלע מעגליכע סלייסעס אין די אררעי. סאוי טרעף א סלייס וועמענס עווערידזש איז מינימאל און פון דעם, געב צוריק די סטארטינג פאזישען פון דער סלייס. שרייב א פונקשן public int solution(int[] A) וואס גיבענדיג אים א נישט-ליידיגע אררעי פון N אינטעדזשערס, קערט אום די בעגינינג/סטארטינג פאזישען פון א סלייס מיט די מינימאל עווערידזש אין אררעי A. אויב איז דא מער פון איינס אזא סלייס, זאל די פונקשן אומקערן די נידריגסטע סטארטינג פאזישען פון אזא סלייס (דהיינו, פון די ערשטע אזא סלייס). למשל, פאר די אויבנדערמאנטע עקזעמפל פון אררעי A, די ענטפערן זאל זיין 1 ווייל די די ערשטע פאזישען פון די סלייס וואס פארמאגט די מינימעל עווערידזש איז סלייס (2, 1) וועמענס עווערידזש איז -> 2 = 2 / (2 + 2), ווי שוין אויבן ערקלערט.
די פונקשן זאל נישט האבן א ראן טיים לענגער פון (n)0.
Solution 10
נשלח: מיטוואך דעצעמבער 09, 2020 5:02 pm
דורך יוניווערסיטי_בחור
קוד: וועל אויס אלע
public static int solution(int[] A)
{
int[] B = new int[A.Length + 1];
int i = 0;
int j = 1;
int copiedVal = A[1];
A[1] = A[1] + A[0];
double min = (double)A[1] / 2;
int pos = 0;
while (j < A.Length - 1 || (j < A.Length && i == 0)) {
B[i + 1] = B[i] + A[i + j]; if ((double)B[i + 1] / (i + 2) < min) {
min = (double)B[i + 1] / (i + 2);
pos = j - 1;
}
if (i == 1) {
A[j] = copiedVal;
j++;
copiedVal = A[j];
A[j] = A[j] + A[(j - 1)];
i = -1;
}
i++;
}
return pos;
}