2018年5月27日 星期日

[Codility] 第六課 Distinct



寫一個 function


class Solution { public int solution(int[] A); }

陣列 A 有連續好幾個 整數 N,最後返回不重複的整數數量。

舉例來說,有一個 陣列 A

A[0] = 2 A[1] = 1 A[2] = 1 A[3] = 2 A[4] = 3 A[5] = 1
此 function 返回 3,因為在陣列 A裡面有 1, 2, 3 三個不重複的數字。

條件:

  • N的範圍必須是 0~100,000
  • 陣列 A 每個元素範圍 -1000,000 ~ 1000,000

複雜度:

  • 最糟的時間複雜度為 O(N * log(N))
  • 最糟的空間複雜度為 O(N) (不含 input 的參數)


Java 程式碼
// you can also use imports, for example:
// you can also use imports, for example:
import java.util.*;

// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");

class Solution {
    public int solution(int[] A) {
        // write your code in Java SE 8
        
        HashSet<Integer> set = new HashSet<Integer>();
        for(int i = 0;i < A.length; i++){
            if(!set.contains(A[i])){
                set.add(A[i]);
            }
        }
        return set.size();
    }
}

分數共拿 100%
任何問題歡迎交流討論,一起學習!

更多面試相關

⇒ [Codility] 面試寫題目經驗感想


感謝相關連結
https://www.codility.com/
https://app.codility.com/programmers/lessons/6-sorting/distinct/

[Codility] 面試寫題目經驗感想



網路上面試的分享都會寫到某些公司要考 Codility,
但是至於細節怎麼考,並無說明很詳細。

Codility 確實是很適合塞選面試者的一個考題,尤其是篩選掉速成培訓班的學員,所以就算工作不會寫到演算法,要找工作前還是需要練習手感,畢竟也有助於促使我們找到寫 code 的最佳解。

[Codility] 第六課 MaxProductOfThree




一個不是空的陣列 A 含有 N個整數,產出的三個數字組合為 (P, Q, R),
相乘結果為 A[P] * A[Q] * A[R] (0 < P < Q < R < N)

舉例來說,有一個 陣列 A

A[0] = -3
A[1] = 1
A[2] = 2
A[3] = -2
A[4] = 5
A[5] = 6


(0, 1, 2), 結果為 −3 * 1 * 2 = −6
(1, 2, 4), 結果為 1 * 2 * 5 = 10
(2, 4, 5), 結果為 2 * 5 * 6 = 60

所以 function 返回最大值 60,因為它是 (2, 4, 5) 的乘積最大值。

條件:

  • N的範圍必須是 3~100,000
  • 陣列 A 每個元素範圍 -1000,000 ~ 1000,000

複雜度:

  • 最糟的時間複雜度為 O(N * log(N))
  • 最糟的空間複雜度為 O(1) (不含 input 的參數)


Java 程式碼
// you can also use imports, for example:
// you can also use imports, for example:
import java.util.*;

// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");

class Solution {
    public int solution(int[] A) {
        // write your code in Java SE 8
        Arrays.sort(A);
        HashSet<Integer> set = new HashSet<Integer>();
        for(int i = 0;i < A.length; i++){
            if(!set.contains(A[i])){
                set.add(A[i]);
            }
        }
        return set.size();
    }
}

分數共拿 100%
任何問題歡迎交流討論,一起學習!

更多面試相關

⇒ [Codility] 面試寫題目經驗感想

感謝相關連結
https://www.codility.com/

[Codility] 第一課 BinaryGap





一個二進制正整數 N,
舉例來說 9 二進制為 1001 含有二進制的間隙長度為 2,
數字 525 二進制為 1000010001 含有兩種二進制間隙分別為 4 跟 3,
數字 20 二進制為 10100 二進制間隙為 1,
數字 15 二進制為 1111 則沒有二進制間隙。

寫一個 function:

class Solution { public int solution(int N); }

給一個正整數 N ,返回最大的二進制間隙,如果沒有,則返回 0

舉例來說 N = 1041 則 function 返回 5,因為 N 的二進制為 10000010001,則最大的間隙為 5。


條件:

  • N的範圍必須是 1.., 2, 147, 483, 647

複雜度:

  • 最糟的時間複雜度為 O(log(N))
  • 最糟的空間複雜度為 O(1) (不含 input 的參數)


Java 程式碼
// you can also use imports, for example:
class Solution {
    public int solution(int X, int[] A) {
        // write your code in Java SE 8
        HashSet<Integer> set = new HashSet<Integer>();
        for(int i = 0;i<A.length;i++){
            if(A[i]<=X){set.add(A[i]);}
           
           if(set.size() == X){
               return i;
           }
        }
        return -1;
    }
}
分數共拿 80%,

訂正版
需考慮 1000 這種後面沒 1 的不成立二進制間隙,
1001000 也會變成  3,須把後面不成立間隙的部分 000 移除。

Java 程式碼
// you can also use imports, for example:
// you can also use imports, for example:
import java.util.*;

// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");

class Solution {
    public int solution(int[] A) {
        // write your code in Java SE 8
         // write your code in Java SE 8
        Arrays.sort(A);
        if(A.length == 3){
            return A[0] * A[1] *A[2];
        }
      
        int N = A.length;
        int result = 0;
        if(A[0] * A[1] > 0 && A[0] < 0){
            result = Math.max(A[0] * A[1] *A[N-1],A[N - 1] * A[N - 2] *A[N - 3]);
        }else{
            result =A[N - 1] * A[N - 2] *A[N - 3];
        }
        
        return result;
    }
}

分數共拿 100%
任何問題歡迎交流討論,一起學習!

更多面試相關

⇒ [Codility] 面試寫題目經驗感想

感謝相關連結
https://www.codility.com/

[Codility] 第五課 PassingCars



一個不是空陣列的 A ,含有連續  N 個整數,
這些 A 陣列連續 N 個整數代表連續的車輛,

陣列 A 只有包含 0 或是 1:

  • 0代表一輛向東行駛的汽車
  • 1代表一輛向西行駛的汽車

目標是要數路過的車輛,我們假設有一組 (P, Q),範圍是 0 < P < Q < N,
P 是往東行駛,Q 是往西行駛。

舉例來說,A 陣列如下:

A[0] = 0
A[1] = 1
A[2] = 0
A[3] = 1
A[4] = 1

我們有五種路過車輛的組合 (0, 1), (0, 3), (0, 4), (2, 3), (2, 4)。

寫一個 function
int solution(int A[], int N);

給一個不是空的陣列 A 並且有 N 個整數,返回值為幾組路過車輛的數字。
如果數字大於 1,000,000,000 則返回 -1

舉例來說,A 陣列如下:

A[0] = 0
A[1] = 1
A[2] = 0
A[3] = 1
A[4] = 1

則 function 返回 5 。

條件:

  • N的範圍必須是 0~100,000
  • 陣列 A 的每個元素不是 0 就是 1

複雜度:

  • 最糟的時間複雜度為 O(N)
  • 最糟的空間複雜度為 O(1) (不含 input 的參數)


Java 程式碼
// you can also use imports, for example:
// you can also use imports, for example:
import java.util.*;
 
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
 
class Solution {
    public int solution(int[] A) {
        // write your code in Java SE 8
          // write your code in Java SE 8
       int zCount = 0;
       int total = 0;
       for(int i =0;i<A.length;i++){
           if(A[i] == 0){
               zCount++;
           }else{
               total +=zCount;
           }
         
       }
       
         if(Math.abs(total) > 1000000000){
               return -1;
           }
        return total;
    }
}
分數共拿 100%,
任何問題歡迎交流討論,一起學習!

更多面試相關

⇒ [Codility] 面試寫題目經驗感想

2018年5月23日 星期三

[Codility] 第四課 MissingInteger




寫一個 function:


  • int solution(int A[], int N);

給一個含有 N 個整數的陣列 A,返回最小的正整數 (必須大於 0) 且不含在 A 陣列裡面
舉例來說 A = [1, 3, 6, 4, 1, 2] ,則 function 應該要返回 5。

A = [1, 2, 3],function 返回 4
A = [−1, −3],function 返回 1

條件:

  • N是一個 1 ~ 100,000 的整數
  • 陣列 A 的每一個元素範圍 -1,000,000 ~ 1,000,000


複雜度:
  • 最糟的時間複雜度為 O(N)
  • 最糟的空間複雜度為 O(N) (不含 input 的參數)


Java 程式碼
// you can also use imports, for example:
// you can also use imports, for example:
import java.util.*;

// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");

class Solution {
    public int solution(int[] A) {
        // write your code in Java SE 8
        HashSet<Integer> list = new HashSet<Integer>();
        if(A.length == 0){
            return 1;
        }
        boolean isSmallerThanZero = true;
        
        for(int i =0;i<A.length;i++){
            if(A[i]>=0){
                isSmallerThanZero = false;
            }
            list.add(A[i]);
        }
        
        if(isSmallerThanZero){
            return 1;
        }
        
        for(int i = 1;i<Integer.MAX_VALUE;i++){
            if(!list.contains(i)){
                return i;
            }
        }
        
        return 1;
    }
}
        

分數共拿 100%,
任何問題歡迎交流討論,一起學習!

更多面試相關

⇒ [Codility] 面試寫題目經驗感想

2018年5月6日 星期日

[Hexo] Blog 在 hexo deploy 時發生錯誤

剛剛要發新文章的時候,
執行 hexo deploy ,突然就拋出以下 Exception

錯誤發生到解決

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
The file will have its original line endings in your working directory.
Fatal: HttpRequestException encountered.
bash: /dev/tty: No such device or address
error: failed to execute prompt script (exit code 1)
fatal: could not read Username for 'https://github.com': Invalid argument
FATAL Something's wrong. Maybe you can find the solution here: http://hexo.io/docs/troubleshooting.html
Error: Fatal: HttpRequestException encountered.
bash: /dev/tty: No such device or address
error: failed to execute prompt script (exit code 1)
fatal: could not read Username for 'https://github.com': Invalid argument
at ChildProcess.<anonymous> (D:\nodejs\test\node_modules\hexo-deployer-git\node_modules\hexo-util\lib\spawn.js:37:17)
at emitTwo (events.js:87:13)
at ChildProcess.emit (events.js:172:7)
at ChildProcess.cp.emit (D:\nodejs\test\node_modules\hexo-deployer-git\node_modules\hexo-util\node_modules\cross-spawn\lib\enoent.js:40:29)
at maybeClose (internal/child_process.js:827:16)
at Process.ChildProcess._handle.onexit (internal/child_process.js:211:5)
FATAL Fatal: HttpRequestException encountered.
bash: /dev/tty: No such device or address
error: failed to execute prompt script (exit code 1)
fatal: could not read Username for 'https://github.com': Invalid argument
Error: Fatal: HttpRequestException encountered.
bash: /dev/tty: No such device or address
error: failed to execute prompt script (exit code 1)
fatal: could not read Username for 'https://github.com': Invalid argument
at ChildProcess.<anonymous> (D:\nodejs\test\node_modules\hexo-deployer-git\node_modules\hexo-util\lib\spawn.js:37:17)
at emitTwo (events.js:87:13)
at ChildProcess.emit (events.js:172:7)
at ChildProcess.cp.emit (D:\nodejs\test\node_modules\hexo-deployer-git\node_modules\hexo-util\node_modules\cross-spawn\lib\enoent.js:40:29)
at maybeClose (internal/child_process.js:827:16)
at Process.ChildProcess._handle.onexit (internal/child_process.js:211:5)
直接到 _config.yml 檔案裡

原本的設定:

1
2
3
4
deploy:
type: git
branch: master

修改後的設定:

1
2
3
4
deploy:
type: git
repo: https://{yourname}:{yourpassword}@github.com/{yourname}/{yourname}.github.io.git
branch: master

參考連結


2018年5月5日 星期六

[Android] Webview 使用 Proguard 後 Bug 解決

因為金流交易使用 Webview 接,
使用 proguard 後,發現 shouldOverrideUrlLoading 此 method 沒有 call,
於是無法 redirect 回來結果,導致金流流程卡住。
此文分享解 Bug 過程思路,歡迎指教!