שלום,
הגשתי מועמדות למשרת תכנות בפייפאל PAYPAL ושלחו לי לינק לבחינה שאני צריך לבצע דרך המחשב (מהבית), הסתכלתי קצת על האתר וזה נקרא CODILITY וראיתי שיש שם אוסף של שאלות ונותנים חצי שעה לכל שאלה, באמיל רשמו לי שהמבחן באורך שעה אז כנראה יהיו שם שתי שאלות.
מישהו מכיר את השאלות שיהיו שם? איזה טיפים איך להתכונן?
תודה מראש.
ע"י: 1_אורח_כללי
שלום
גם אני נבחנת באתר המדובר codility
שאלתי האם השאלות מוסברות בעברית או רק באנגלית
ע"י: 1_אורח_כללי
התשובה ל2:
function findMinMaxIndex(arr) {
if (!arr.length) {
return -1;
}
let currentPivot = Number.NEGATIVE_INFINITY;
let currentMax = Number.NEGATIVE_INFINITY;
let canidateIndex;
for (let i = 0; i < arr.length; i += 1) {
if (arr[i] > currentPivot) {
if (typeof canidateIndex === 'undefined' && arr[i] > currentMax) {
currentPivot = arr[i];
canidateIndex = i;
}
} else {
canidateIndex = undefined;
}
if (arr[i] > currentMax) {
currentMax = arr[i];
}
}
console.log(arr[canidateIndex]);
if (typeof canidateIndex !== 'undefined') {
return canidateIndex;
}
return -1;
}
console.log(findMinMaxIndex([1, 5, 3, 4, 5, 1, 4, 6, 7, 8, 9]));
ע"י: 1_אורח_כללי
זה התשובה לשאלה 2:
def solution(alist):
max_from_left = alist[0]
max_list = []
for num in alist:
if num > max_from_left:
max_from_left = num
max_list.append(max_from_left)
i = len(alist) - 1 # last element
min_from_right = alist[i]
while i >= 0:
# finding minimum from end of the list
if alist[i] < min_from_right:
min_from_right = alist[i]
# if an element is bigger then the max to the left,
# and smaller then the min from the right - it's the pole!
if alist[i] >= max_list[i] and alist[i] <= min_from_right:
return i
i -= 1
return -1
זה מה שעשיתי והיה רשום לי שעברתי 85%, עם יעילות 100%. לא יודע על איזה מקרה קצה זה נפל.
בגדול אני רץ משמאל לימין ומוצא מערך של מקסימומים. ואז רץ מימין ומוצא מינימומים, וכל פעם משווה ביניהם.
זה התשובה ל3:
from collections import Counter
import numpy as np
def solution(k, nums):
# a list of opposite to the numbers in the input list.
# for example, if 4 is in the input list and 6 is k,
# then 6-4=2 will be added to the diffs list
diffs = []
for num in nums:
diffs.append(k-num)
k_complementary_sum = 0
nums_counter = Counter(nums) # counting how many times a number appears in the input list
for num in diffs:
k_complementary_sum += nums_counter[num] # if the diff is not in the original input, the Counter will give 0
return k_complementary_sum
ע"י: 1_אורח_כללי
הכי מהר זה לעבור פעם אחת על המערך מימין לשמאל ולשמור אינדקסים שקטנים מהכי קטן שהיה עד עכשיו ואז הפוך משמאל לימין ולבדוק אם יש אינדקס שמופיע בשניהם.
OH BI
ע"י: 1_אורח_כללי
מישהו ידע לפתור השאלה:
השאלה השניה היתה שנתון מערך של מספרים, וצריך למצוא את האינדקס של איזהשהו מספר במערך שמקיים שכל המספרים לפניו קטנים ממנו וכל המספרים שאחריו גדולים ממנו.
למשל:
9 8 7 6 4 1 5 4 3 5 4
המספר 6 (אינדקס 7) מקיים את זה.
תחשבו לבד איך לממש את זה, אבל הרעיון די פשוט ב- O(n) x
סרוק את המערך משמאל לימין.
1) בחר מספר כפיבוט.
2) כל עוד יש מספר גדול יותר ממנו, המספר שנבחר בסעיף 1 הוא הפיבוט שלך.
3) אם יש מספר קטן יותר, המספר שנבחר מקודם כפיבוט יהפך ל- invalid. במצב כזה, המשך לסרוק את הרשימה עד שתמצא מספר גדול יותר מהמספר שנהפך ל- invalid.
4) אם ב- 3 מצאת מספר גדול יותר, בחר אותו כפיבוט וחזור לסעיף 2.
5) בסיום הסריקה, אם אכן נשאר פיבוט חוקי, התשובה היא מה שנדרש מהשאלה. אם נשאר מספר שהוא invalid, אין מספר כפי שנדרש מהשאלה.
בהצלחה.
ע"י: 1_אורח_כללי
חבר'ה אני מאמין שחוץ מהשאלה הראשון נכנסתם פה לכל מיני חישובים מסובכים, אני מאמין שזה סה"כ מבחן בית שבודק יסודות תיכנות, אין סיבה לפתור את זה בדרכים מאוד מסובכות כדי לחסוך זמן ריצה.
ע"י: 1_אורח_כללי
מישהו ידע לפתור השאלה:
השאלה השניה היתה שנתון מערך של מספרים, וצריך למצוא את האינדקס של איזהשהו מספר במערך שמקיים שכל המספרים לפניו קטנים ממנו וכל המספרים שאחריו גדולים ממנו.
למשל:
9 8 7 6 4 1 5 4 3 5 4
המספר 6 (אינדקס 7) מקיים את זה.
ע"י: 1_אורח_כללי
public static int numOfZugot(int arr, int num){
int count=0;
for (int i = 0; i < arr.length; i++) {
for (int j = i+1; j < arr.length; j++) {
if((arr+arr )==num)count++;
}
}
return count;
}
שאלה 3
ע"י: 1_אורח_כללי
public static int numOfZugot(int arr, int num){
int count=0;
for (int i = 0; i < arr.length; i++) {
for (int j = i+1; j < arr.length; j++) {
if((arr+arr )==num)count++;
}
}
return count;
}
שאלה 3
זה פיתרון ב-
o(n^2)
וזה לא הכי יעיל שאפשר לעשות. יש שתי דרכים אחרות יותר טובות, אחת זה למיין את המערך ואז לעבור עם שני אינדקסים - אחד בהתחלה ואחד בסוף וכל פעם בודקים אם הסכום של האיברים באינדקסים האלה נותנים את המספק הרצוי. אם הוא גדול מדי, מזיזים את האינדקס של המס' הגדול אחד למטה, אם הוא קטן מדי מזיזים את האינדקס של המס' הקטן אחד למעלה ובודקים שוב. סה"כ o(nlogn) בגלל המיון.
דרך אחרת זה לעשות את זה עם טבלת hash- עוברים על המערך פעם אחת ומכניסים את המספרים לטבלה. אחרי זה עוברים על הטבלה ובכל מקום שיש מס' i בודקים אם קיים k-i בטבלה (מדובר בטבלת hash ולכן הבדיקה הזאת אורכת o(1). סה"כ להכניס את המספרים לטבלה o(n) ולעבור על כל המספרים בטבלה o(n) ולכן בסה"כ o(n)
ע"י: 1_אורח_כללי
public static boolean anagPalindrom(String str){
int letterCount =new int;
for(int i =0 ; i<str.length();i++){
char tempChar = str.charAt(i);
letterCount ++;
}
int count = 0;
for (int i = 0; i < letterCount.length; i++) {
if(letterCount%2!=0)count++;
}
if(count>1) return false;
return true;
}
שאלה 1...
ע"י: 1_אורח_כללי
אני גם עשיתי את המבחן
היו שלוש שאלות והיה לי שעתיים , סיימתי אחרי שעה ורבע
הכל עבד
לא חזרו אלי !!
ע"י: 1_אורח_כללי
איך פותרים את השאלה השנייה (למצוא את האינדקס של מספר שכל המספרים שלפניו קטנים ממנו, ואחריו גדולים ממנו) ?
ע"י: סמווות0
טוב נראה לי שהגיע הזמן לפרסם גם את שתי השאלות האחרות
היו שם 3 שאלות - מבחן שעה וחצי, את הראשונה כבר רשמתי.
השאלה השניה היתה שנתון מערך של מספרים, וצריך למצוא את האינדקס של איזהשהו מספר במערך שמקיים שכל המספרים לפניו קטנים ממנו וכל המספרים שאחריו גדולים ממנו.
למשל:
9 8 7 6 4 1 5 4 3 5 4
המספר 6 (אינדקס 7) מקיים את זה.
-------------------------------------------------------
השאלה השלישית היתה שנתון מערך של מספרים, ומספר K וצריך לדעת מה מספר הזוגות במערך שהסכום שלהם שווה K.
למשל המערך: 2 5 1 4 והספרה K = 6
יש שני זוגות שהסכום שלהם 6
4+2 = 6
5+1 = 6
לכן התשובה היא 2
ע"י: סמווות0
אז ככה...
היתה בחינה באינטרנט, קיבלתי קישור לבחינה שנעשית דרך אתר CODILITY , הבחינה היתה 3 שאלות שצריך לפתור ב 90 דקות.
השאלות עצמם לא היו קשות, כולם היו על מערכים.
אני ארשום רק את השאלה הראשונה כי היא הכי קלה (גם האחרות קלות):
אנגרם ANAGRAM - מילה שנוצרת מערבוב אותיות של מילה ראשונה. למשל "שרת" היא אנגרמה של "רשת".
פלינדרום palindrome - היא מילה שנקראת אותו דבר משמאל ומימין. למשל KAYAK
השאלה:
נתון סטרינג (מערך של אותיות) וצריך לדעת אם הוא אנגרם של פלינדרום ב- O)n) זמן.
-----
אמרו לי שלא עברתי את הבחינה.
האמת, אני ניצלתי את כל ה 90 דקות בשביל לפתור את השאלות ועשיתי הרבה בדיקות לפני שהגשתי, וראיתי שכל הדוגמאות שנתתי עובדות במאה אחוז.
יכול להיות שאנשים אחרים פתרו את השאלות בפחות זמן אז העדיפו להמשיך איתם.