Posts
Permission denied for a Mac OSX Dropbox app
最近 Mac 的 Dropbox 突然出問題,可能是前陣子搬動家目錄所導致,想將他進行重裝還原,但過程中總是會跟我要求提升權限:
{% img /images/posts/DropboxPermissionDenied/1.png %}
輸入密碼後權限好像都沒取道,怎樣都出現權限錯誤的問題。
{% img /images/posts/DropboxPermissionDenied/2.png %}
查了一下要在 Terminal 下下列指令:
mv ~/.dropbox ~/.Trash sudo mv /Library/DropboxHelperTools ~/.Trash 指令下完後重新安裝就可以了。
Link Dropbox asking for permissions to wrong folder after changing account name - Ask Different IPG EMEA Deployment Knowledge Base: After migrating a Mac user’s profile, Dropbox fails to open: keeps asking for permissions
read morePosts
LeetCode - Roman to Integer
LeetCode 的 Roman to Integer 題目如下:
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
簡單的說他是要一個功能,當給予一個羅馬數字,能將它轉換成對應的數值。
這需要參考 羅馬數字 - 維基百科,自由的百科全書,看羅馬數字背後的規則。
羅馬數字有七個字母組成,分別為 I(1)、V(5)、X(10)、L(50)、C(100)、D(500)和 M(1000)。當字母重複出現,則表示數值為重複倍。如果較大的字母右邊放上較小的字母,表示兩數要相加,反之表示大數要減小數。其它的規則跟這題無關,就不提了。
所以像是 4 對應到的就是 IV (5 - 1),XX 對應到 20 (10 + 10), VIII 對應到 8 (5 + 1 + 1 + 1),以此類推。
這邊筆者是用一個字典檔存放羅馬數字字元與其對應的數值,從輸入參數的後面往前處理,如果前一個字元對應到的數值大於現在這字元的數值,則將回傳值減去當前數值,反之則加上當前數值。
public class Solution { public int RomanToInt(string s) { var dict = new Dictionary<char, int>() { {'I', 1}, {'V', 5}, {'X', 10}, {'L', 50}, {'C', 100}, {'D', 500}, {'M', 1000}, }; var ret = 0; var prev = -1; for(var idx = s.
read morePosts
LeetCode - Length of Last Word
LeetCode 的 Length of Last Word 題目如下:
Given a string s consists of upper/lower-case alphabets and empty space characters ’ ‘, return the length of last word in the string.
If the last word does not exist, return 0.
Note: A word is defined as a character sequence consists of non-space characters only.
For example,
Given s = “Hello World”,
return 5.
簡單說他要的是要一個功能,當給予一個由大小寫字元與空字元所組成的字串,會回傳最後一個 Word 的長度。
如果最後一個 Word 不存在,則回傳0。
舉個例子來說:
給予 “Hello World”, 會回傳 5.
read morePosts
Casting (Boxing/Unboxing) is better than parsing
以往我們在將 Object 中被裝箱的數值轉成數值時,大概會有兩種作法。
一種是直接將數值拆箱後使用,一種則是將 Object ToString 後再用 Parse 方法將之轉成預期的數值型態。
以往我會覺得這沒那麼重要,兩者愛用哪個都可以,但最近在 Review 時心血來潮做了個測試才發現不是那麼一回事,兩者會有效能上的差異。
測試程式就像下面這樣簡單:
using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication16 { class Program { static void Main( string[] args) { var count = 1000000; var obj = 123 as object; Console.WriteLine( "(int)obj: {0}" , DoTest(count, () => { var value = ( int)obj; })); Console.WriteLine( "int.Parse(obj.ToString()): {0}" , DoTest(count, () => { var value = int.
read morePosts
LeetCode - Power of Two
LeetCode 的 Power of Two 題目如下:
Given an integer, write a function to determine if it is a power of two.
簡單說他要的是要一個功能,給予一個整數,能判別他是否是 2 的冪次。
可以簡單的用迴圈反覆的除以 2,看是否可以整除。
public class Solution { public bool IsPowerOfTwo(int n) { if (n == 0) return false; if (n == 1) return true; var mod = -1; do { mod = n % 2; n /= 2; } while(n != 1 && mod == 0); return n == 1 && mod == 0; } } 也可以用位元運算下去處理,寫起來會更為簡潔,像是這樣:
read morePosts
Visual Studio 2015 - Diagnostic Tools
Diagnostic Tools 是 Visual Studio 2015 的新功能,能幫助開發人員快速的找出效能上的問題。
該功能預設除錯時會自動帶出,畫面會像下面這樣。
{% img /images/posts/DiagnosticTools/1.png %}
一邊運行,一邊就會將 CPU、記憶體、與 Event 的狀態帶出。有效能問題開發人員可以即早發現。像這邊的記憶體曲線看起來雖然是平的,但是可以看到有很多次的 GC 出現,這就是需要進行調整的。
{% img /images/posts/DiagnosticTools/2.png %}
記憶體這邊的診斷上我們可以用快照比對分析。只要簡單的進行快照,Diagnostic Tools 就會將兩個快照間的差異清楚的呈現。像是這邊就可以看到物件數跟 Heap 大小有上升的趨勢。進一步點擊,我們可以查看是被哪些物件佔用的,增加的又是哪些物件。
{% img /images/posts/DiagnosticTools/3.png %}
Link Performance and Diagnostic Tools in Visual Studio 2015 - Microsoft Application Lifecycle Management - Site Home - MSDN Blogs Visual Studio 2015 Diagnostics Investments - The Visual Studio Blog - Site Home - MSDN Blogs
read morePosts
LeetCode - Valid Anagram
LeetCode 的 Valid Anagram 題目如下:
Given two strings s and t, write a function to determine if t is an anagram of s.
For example,
s = “anagram”, t = “nagaram”, return true.
s = “rat”, t = “car”, return false.
Note:
You may assume the string contains only lowercase alphabets.
簡單說他要的是要一個功能,當給予兩個字串,能判斷出這兩個字串是否只是不同的組合順序。
舉個例子來說, s = “anagram”, t = “nagaram”, 回傳 ture.
s = “rat”, t = “car”, 回傳 false.
這邊我們可以統計兩個字串中的每個字元出現的個數是否一樣,也可以像筆者這樣簡單的將字串排序後直接比對。
read morePosts
LeetCode - Plus One
LeetCode 的 Plus One 題目如下:
Given a non-negative number represented as an array of digits, plus one to the number.
The digits are stored such that the most significant digit is at the head of the list.
簡單說他要的是要一個類似加法器的功能。給予一個非負的數值陣列用以表示一個非負的數值,能回傳加一後的數值。
這邊筆者是用 for 迴圈從輸入的陣列尾端往前遍巡,第一個處理的陣列元素加一後如果有超過 10,則將當前數值改為除 10 後的餘數,且進位的值帶到下一個陣列數值去做相同的處理。最後跑完如果無進位值,則把當前處理完的陣列回傳。若有進位值,則將進位值與當前處理完的陣列合併回傳。
public class Solution { public int[] PlusOne(int[] digits) { var carry = 1; var result = new int[digits.Length]; for(var idx = digits.Length - 1; idx >= 0; --idx) { var digit = digits[idx]; var newDigit = digit + carry; carry = newDigit / 10; result[idx] = newDigit % 10; } if(carry == 0) return result; return (new int[]{carry}).
read morePosts
LeetCode - Valid Parentheses
LeetCode 的 Valid Parentheses 題目如下:
Given a string containing just the characters ‘(’, ‘)’, ‘{’, ‘}’, ‘[’ and ‘]’, determine if the input string is valid.
The brackets must close in the correct order, “()” and “()[]{}” are all valid but “(]” and “([)]” are not.
簡單說他要的是要一個功能,帶入的字串只會由 ‘(’、’)’、’{’, ‘}’、’[’ 與 ‘]’ 這幾個字元所組成,需判斷輸入是否正確。
輸入的字元需成對並符合一定的順序,成對的字元內不可夾雜不成對的字元,像是 “()” 與 “()[]{}” 就是正確的格式,而 “(]” 與 “([)]” 不是。
這邊筆者是用 Dictionary 去紀錄成對的字元。然後將帶入的字串字元依序處理。如果其字元跟堆疊最後的字元成對,則將堆疊最後的字元取出。若不成對則將當前字元放入堆疊內。
堆疊在使用前會先放一個空的字元,如果處理到最後堆疊內還剩一個字元,代表帶入的字串是正確的,反之則帶入的字串是錯誤的。
public class Solution { public bool IsValid(string s) { var validChars = new Dictionary<char, char>() { {'(', ')'}, {'{', '}'}, {'[', ']'} }; var length = s.
read morePosts
LeetCode - Contains Duplicate III
LeetCode 的 Contains Duplicate III 題目如下:
Given an array of integers, find out whether there are two distinct indices i and j in the array such that the difference between nums[i] and nums[j] is at most t and the difference between i and j is at most k.
簡單說他要的是要一個功能,當給予一個整數陣列,能找出兩個不同的索引值,這兩個索引值的差距最多為 k,且這兩個索引值對應整數陣列所得到的整數值相差最多為 t。
這邊筆者是用迴圈搭配 Dictionary 來處理,Dictionary 內只存放 k 筆資料,每次處理一個數值時就去查看 Dictionary 內是否有相差 t 的數值。 如果有則去判斷索引值的差距是否在 k 內,是的話則回傳 true。
public class Solution { public bool ContainsNearbyAlmostDuplicate(int[] nums, int k, int t) { var length = nums.
read more