---
# System prepended metadata

title: Online Assesement 2021-06-11 (Google)
tags: [assesement, leetcode, google]

---

# Online Assesement 2021-06-11 (Google)
###### tags: `leetcode` `google` `assesement`

* 兩題題目，一個小時，這兩題我都沒有寫過。
 
## :memo: 第一題

![](https://i.imgur.com/vatCpHw.png)

## :memo: 題意
* :medal: 我一開始有點看不懂題目，**good number** 的定義看清楚，一個數字裡面的每個數字被**旋轉180度後**，會變成另一個數字那就是好數字，那如果給你數字 n，請你找出 1~n 裡面有幾個好數字。

* 他有舉例
    * 0,1,8: 轉了之後不變
    * 2: 變成 5
    * 5: 變成 2
    * 6: 變成 9
    * 9: 變成 6


## :memo: My solution
* :medal: **思考一**: 所以這個數字至少有一個 [2,5,9,6]，其他是 [0,1,8]，就會成立。


```python=
class Solution:
    def rotatedDigits(self, n: int) -> int:
        
        may = ['0','1','8']
        good = ['2','5','6','9']
        
        ans = 0
        for i in range(1, n+1):
            mayc = 0
            goodc = 0
            for char in str(i):
                if char in may:
                    mayc += 1
                elif char in good:
                    goodc += 1
                else:
                    break
                    
            if len(str(i)) == mayc + goodc and goodc > 0:
                ans += 1
            
        return ans

```

## :memo: 檢討
* 這個題目我第一次 submit 失敗是在程式第八行那邊，我沒注意到是從1開始。
* 然後 may 和 good 可以改成 dictionary，速度會更快。
## :memo: better solution

```python=
class Solution:
    def rotatedDigits(self, n: int) -> int:
        
        may = {'0':True, '1':True, '8': True}
        good = {'2':True, '5':True, '6': True, '9': True}
        
        ans = 0
        for i in range(1, n+1):
            mayc = 0
            goodc = 0
            for char in str(i):
                if char in may:
                    mayc += 1
                elif char in good:
                    goodc += 1
                else:
                    break
                    
            if len(str(i)) == mayc + goodc and goodc > 0:
                ans += 1
            
        return ans

```

## :memo: BigO
* 時間複雜度: O(n)
* 空間複雜度: O(1)




## :memo: 第二題

![](https://i.imgur.com/B0ZdUK0.png)
![](https://i.imgur.com/uRdAYdc.png)


## :memo: 題意
* :medal: 找一個位置可以讓 alex 與其他人離的最遠的距離，那距離是多少。


## :memo: My solution
* :medal: **思考一**: 那我就是紀錄 0 的 list。
* :medal: **思考二**: 如果有這種 [0,0,0,0,0,0,1,0,0,0,0,0,0,0,1]，就要選 index = 0 ~ 5 的這個 list 或是 [1,0,0,0,0,0,1,0,0,0,0]，因此要記錄只有 0 的 list 開始位置和最後的位置。

```python=
class Solution:
    def maxDistToClosest(self, seats: List[int]) -> int:
        import math
        
        first = 0 
        last = 0 
        seat = 0
        ans = []
        
        for index, value in enumerate(seats):
            if value == 0 and seat:
                seat += 1
            elif value == 0 and not seat:
                first = index
                seat += 1
            elif index and value == 1 and seats[index-1] == 0:
                last = index - 1
                ans.append([first, last, seat])
                first = 0
                last = 0
                seat = 0
 
        if seat:
            last = index
            ans.append([first, last, seat])
            
        final = 0
        for a,b,c in ans:
            if a == 0 or b == len(seats) - 1:
                final = max(c, final)
            else:
                final = max(math.ceil(c/2), final)
                
        return final
```

## :memo: BigO
* 時間複雜度: O(n)
* 空間複雜度: O(1)

## :memo: 真正操作的時間
* 每題都花 25 分鐘，總共 50 分鐘。第一題應該要花更少時間。

![](https://i.imgur.com/HrxfTjv.png)

![](https://i.imgur.com/kWR3rOP.png)
