2018年11月14日 星期三

[Codec] HEVC Study


  • Resource
  • Content
    • Profile, Levels, Tiers (introduced in H265)
      • Profile
        • Main Profile < Main Still Picture Profile < Main 10 Profile
        • Main 10 Profile
          • 10 bits/sample for HDR, High color gamut, etc.
      • Levels
        • defines resolution, frame rate, bit rate, buffer capacity (e.g. dpb - decoded picture buffer), ...etc.
        • Level Resolution
          4 HD
          5 4K
          6 8K
      • tier
        • Main tier/High tier to distinguish the bit rates
    • Syntax
    • Patent fee

2018年11月2日 星期五

[LeetCode] 118. Pascal's Triangle


  • Problem: 118 Pascals's Triangle, 主要為該層元素為上一層的左邊加上一層右邊而得
  • Concept:
    • 算是滿基本的題目, 稍微將 index 列出來, 可以發現
    • A[i][j] = A[i-1][j-1] + A[i-1][j]
    • 但還是需要注意 index 從 0開始, 必須習慣一下
  • Implementation
    • class Solution {
      public:
          vector> generate(int numRows) {
              vector> result;
      
              for (int i = 0; i < numRows; i++) {
                  vector row;
                  
                  row.push_back(1);
                  for (int j = 1; j < i; j++) {
                      int val = result[i - 1] [j - 1] + result[i - 1][j];
                      row.push_back(val);
                  }
                  // no need to add right 1 at first row
                  if (i > 0) row.push_back(1);
                  
                  result.push_back(row);
              }
              return result;
          }
      };
      

2018年11月1日 星期四

[LeetCode] 139. Word Break


  • Problem: Word Break
  • Concept:
    • 可以 recursive 的將一個 word 拆成左半跟右半
    • 利用 memorize 的 hash table 來記錄
    • 注意終止條件:
      • cache 已存在
      • 目前的 dictionary 包含完整的 string
  • Implementation
    • class Solution {
      public:
          bool wordBreak(string s, vector& wordDict) 
          {
              unordered_set quickHash(wordDict.begin(), wordDict.end());
              return wordBreak(s, quickHash);
          }
          
          bool wordBreak(string s, unordered_set quickHash) 
          {
              if (m_mem.count(s)) return m_mem[s];
              if (quickHash.count(s) > 0) {
                  m_mem[s] = true;
                  return m_mem[s];
              }
      
              for (int i = 1; i < s.length(); i++) {
                  if (quickHash.count(s.substr(0, i)) && wordBreak(s.substr(i), quickHash)) {
                      m_mem[s] = true;
                      return m_mem[s];
                  }
              }
      
              m_mem[s] = false;
              return m_mem[s];
          }
      
      private:
          unordered_map m_mem;
      };