搜尋感興趣的網誌

所有文章連結

2022年3月5日 星期六

Hacker Rank LonelyInteger Solution by Python


 

這題真的想很久,也測試很久,如果每個字都要判斷那真的要寫一大堆,而且也大概會錯,後來看了很多文章才找出一個辦法,就是以二進制去判斷是否重複,也就是位元運算才解出來。

 

解這些題目時,並不是甚麼最佳化解,出發點是以能了解題目在說甚麼,解題方式是目前自己可以理解並解答完成的模式去走,先解的出來,未來再一步步朝著更高一階去進行,所以請別太苛責啦!!

 

小雷的LonelyInteger Solution : 


'''
題目 :
找出arr中唯一數

範圍 :
index唯一且是奇數
1 <= n < 100
0 <= a[i] <= 100
0 <= i < n

解題方向 :
以二進制度判斷是否重複
沒有重複的抓出來
'''

def LonelyInteger(arr) :
    # 二進制0000 0000
    not_rep = 0

    for i in arr :
        # 轉換二進制判斷是否有重複
        not_rep ^= i

    print("not_rep = ", not_rep)

if __name__ == "__main__" :
    arr = [1, 2, 3, 4, 5, 6, 5, 4, 3, 2, 1]
   
    LonelyInteger(arr)

Hacker Rank ArrSortMedian Solution by Python

 


今天的題目就是重新排列後找出中間的值是多少,這題小雷有想了好一下子,用迴圈去找?還是條件去找?怎麼試好像都怪怪的,最後才想出了一個比較簡單的作法,只是這個範圍沒有放題目的測試也都有通過,所以..就知道範圍就好。

 

解這些題目時,並不是甚麼最佳化解,出發點是以能了解題目在說甚麼,解題方式是目前自己可以理解並解答完成的模式去走,先解的出來,未來再一步步朝著更高一階去進行,所以請別太苛責啦!!

 

小雷的ArrSortMedian Solution : 


'''
題目 :
將arr重新排大小後印出中間值

範圍 :
1 <= n <= 1000001
-10000 <= arr[i] <= 10000

解題方向 :
重新排大小
找出中間值的規則
轉換int並印出中間值
'''

def ArrSortMedian(arr) :
    n = len(arr)

    arr.sort()
    # 找出中間值的index
    median_index = int((n - 1) / 2)
    median_num = arr[median_index]

    print("median_num = ", median_num)


if __name__ == "__main__" :
    arr = [8,1,7,4,6,5,3,0,2]
   
    ArrSortMedian(arr)

Hacker Rank MiniMaxSum Solution by Python

 


今天的題目還算簡單,單純把一個陣列最大總數與最小算出來,不過題目給的arr並不是亂數,所以就沒有重新進行排列。

 

解這些題目時,並不是甚麼最佳化解,出發點是以能了解題目在說甚麼,解題方式是目前自己可以理解並解答完成的模式去走,先解的出來,未來再一步步朝著更高一階去進行,所以請別太苛責啦!!

 

小雷的MiniMaxSum Solution : 


'''
題目 :
計算arr減去頭尾的最大最小值
arr_min = 1,3,5,7,arr_max = 3,5,7,9

範圍 :
1 <= arr[i] <= 10**9

解題方向 :
判斷範圍
判斷arr開頭與結尾的
總加後減去頭尾
'''


def MiniMaxSum(arr) :
    arr_total = 0
    arr_start = min(arr)
    arr_end = max(arr)

    for i in range(len(arr)) :
        if 1 <= arr[i] <= 10**9 :
            arr_total += arr[i]
        else :
            print("arr out of range")

       
    print("arr_total = ", arr_total)
    print("min = ", arr_total - arr_end)
    print("max = ", arr_total - arr_start)


if __name__ == "__main__" :
    arr = [1, 3, 5, 7, 9]

    MiniMaxSum(arr)

2022年3月3日 星期四

Hacker Rank TimeConversion Solution by Python

 



今天的題目是單純的時制轉換,比較麻煩的地方是在於凌晨12點時要變更為00:00,一開始想不出來,所以用了土法煉鋼的方式,套一句上Python課程時老師說的話 : 基礎要熟練,否則沒有模組可以使用的時候就啥都寫不出來了,這題應該是有甚麼方便的模組直接轉換會來的快許多,但練習一下自我的邏輯也是不錯


解這些題目時,並不是甚麼最佳化解,出發點是以能了解題目在說甚麼,解題方式是目前自己可以理解並解答完成的模式去走,先解的出來,未來再一步步朝著更高一階去進行,所以請別太苛責啦!!

 

小雷的TimeConversion Solution : 


'''
題目 : 將12小時制轉換為24小時

範圍 : 沒有

解題方向 :
小時判斷早上或晚上
int與str合併問題
凌晨12時要變更為00
'''

def TimeConversion(s) :
    list_s = list(s)

    zero = str("0")
    hour = int(list_s[0] + list_s[1])
    minuue = list_s[3] + list_s[4]
    second = list_s[6] + list_s[7]
    symbol = list_s[2]
    hour_system = list_s[8] + list_s[9]

    if hour_system[0] == "P" :
        if hour == 12 :
            change_hours = hour
        elif hour < 12 :
            change_hours = hour + 12
        hour_type = str(change_hours)
    elif hour_system[0] == "A":
        change_hours = hour
        if change_hours <= 9 :
            change_hours = zero + list_s[1]
        elif change_hours == 12 :
            change_hours = zero + zero
        hour_type = str(change_hours)
    else :
        print("wrong time")
       
    print(hour_type + symbol + minuue + symbol + second)
   

if __name__ == "__main__" :
    s = "12:00:00AM"
   
    TimeConversion(s)

Hacker Rank Plus Minus Solution by Python


之前有空閒時小雷會做一些Hacker Rank的解題,以免用R寫數據分析後Python全都忘光光,解題目前討論度高的大概就是HackerRankLeeCode了,LeeCode雖然也有解一些題目,但是submit之後會有跑了幾秒、記憶體消耗了多少甚麼的,對小雷這種初學者來說實在看了心驚..

 

網路上看很多人說到HackerRank題目大概是LeeCode的簡易程度,恩..這個小雷倒是感覺不出來,算一算真的開始接觸編程(RPython)大概是半年多,還有非常非常多需要熟悉了解的事情。

 

解這些題目時,並不是甚麼最佳化解,出發點是以能了解題目在說甚麼,解題方式是目前自己可以理解並解答完成的模式去走,先解的出來,未來再一步步朝著更高一階去進行,所以請別太苛責啦!!


小雷的Solution :


'''
題目 :
判斷一個arr中數字正負數字出現的次數
將其除與arr的長度後轉換為十進制

範圍 :
0 < n <= 100
-100 < len(arr) <= 100

解題方向 : 設定正負個數、判斷正負後做計算
'''

def plus_minus(arr, n) :
    # 設定正、負、零個數
    po = 0
    ne = 0
    ze = 0

    # 判斷n與arr範圍
    if 0 < n <= 100 and -100 < len(arr) <= 100 :
        # 取arr的長度作為迴圈範圍
        for i in range(len(arr)) :
            # arr[i] >> 取出arr中0,1,2,3,4,5的值判斷正負
            if arr[i] > 0 :
                # 個數加一
                po += 1
            elif arr[i] < 0 :
                ne += 1
            elif arr[i] == 0 :
                ze += 1
       
        # 依照題目的公式計算
        print("po = ", "%f"%(po / len(arr)))
        print("ne = ", "%f"%(ne / len(arr)))
        print("ze = ", "%f"%(ze / len(arr)))
    else :
        print("error arr and n")


if __name__ == "__main__" :
    arr = [-4, 3, -9, 0, 4, 1]
    n = 6
    plus_minus(arr, n)

Hacker Rank FizzBuzz Solution by Python

 


今天的題目是HackerRank的測試題目,一開始寫的時候本來想說應該不難,真的寫時才發現List開頭的0要怎麼弄阿..而且限制時間好像不到十分鐘,所以是時間到了之後才解出來,看樣子還有好長的路要走

 

解這些題目時,並不是甚麼最佳化解,出發點是以能了解題目在說甚麼,解題方式是目前自己可以理解並解答完成的模式去走,先解的出來,未來再一步步朝著更高一階去進行,所以請別太苛責啦!!

 

小雷的FizzBuzz Solution : 


'''
題目 :
3與5的倍數 >> FizzBuzz
只有3 >> Fizz
只有5 >> Buzz
都沒有 >> i

範圍 : 0 < n < 2*10^5

解題方向 :
含頭不含尾零要去除,轉換list時尾數+1
分別計算3與5的字詞再做輸出判斷
'''

def FizzBuzz(n) :
    # 增加尾數
    n = n + 1

    # 從1開始計算並轉換為list
    ran_n = list(range(1, n))

    # 判斷題目範圍
    if 0 < n < 2*10**5 :
        for i in range(len(ran_n)):
            # 計算3與5的餘數
            fizz = ran_n[i] % 3
            buzz = ran_n[i] % 5
            # 判斷輸出哪項字詞
            if fizz == 0 and buzz == 0:
                print("FizzBuzz")
            elif fizz == 0 and buzz != 0 :
                print("Fizz")
            elif buzz == 0 and fizz != 0:
                print("Buzz")
            else :
                print(ran_n[i])
    else :
        print("Error n")
       

if __name__ == "__main__" :
    n = int(input("enter num : "))
    FizzBuzz(n)

其他文章

看看精選文章

納希克房價分析 | Nashik Apartment Price Analyze – 語法解析(上)

  這次 Nashik 的房價分析有上傳至 Kaggle ,有興趣的朋友可以前往閱覽, RMarkdown PDF 報告存放在 Google 雲端,程式碼則是存放於 Github ,照慣例會分享好用的函式語法,雖說基本的 Packages 與語法可能很多人都會完整的閱覽,但是實際...