發表文章

目前顯示的是 3月, 2022的文章

[LeetCode]Search Insert Position

 Search Insert Position 給一個排序且沒有重複的整數陣列,尋找目標值在陣列哪個位置,如果沒有結果則回傳該整數應該在的位置。 Example 1 Input: nums = [1,3,5,6], target = 5 Output: 2 Example 2 Input: nums = [1,3,5,6], target = 2 Output: 1 Example 3 Input: nums = [1,3,5,6], target = 7 Output: 4 解法 class Solution { /** * @param Integer[] $nums * @param Integer $target * @return Integer */ function searchInsert($nums, $target) { $count = count($nums); $data = 0; for ($i = 0; $i < $count; $i++) { if ($target == $nums[$i]) { $data = $i; break; } if ($target > $nums[$i]) { $data = $i + 1; } } return $data; } }

[Linux]如何使用rsync

Linux 的 rsync 可以同步、備份檔案與目錄,他的動作跟 cp 類似,但其中的差別在於, rsync 在執行第二次會跳過重複的檔案,只針對異動過檔案進行複製。 常見參數: -v:verbose 模式,輸出比較詳細的訊息。 -r:遞迴(recursive)備份所有子目錄下的目錄與檔案。 -a:封裝備份模式,相當於 -rlptgoD,遞迴備份所有子目錄下的目錄與檔案,保留連結檔、檔案的擁有者、群組、權限以及時間戳記。 -z:啟用壓縮。 -h:將數字以比較容易閱讀的格式輸出。 rsync -avh /sites /mnt/mls 參考網址 : https://zh.wikipedia.org/wiki/Rsync https://blog.gtwang.org/linux/rsync-local-remote-file-synchronization-commands/  

win10的outlook無法搜尋到最新的郵件

圖片
User反應他的Outlook可以搜尋到昨天的信件,但是沒辦法搜尋今天最新的信,檢查發現他的作業系統為 Windows 10 專業版 20H1,網路爬文發現原來是 KB5008212 這在搞,因此先執行系統更新看看,更新後作業系統為 Windows Update 至最新版本為 20H2,搜尋後 KB5008212 也更新後移除了。 如果更新作業系統無法解決,可以參考下面文章的解決方式。 Outlook 搜尋無法顯示在 Windows Update KB5008212 之後的最新電子郵件

[LeetCode]Remove Duplicates from Sorted Array

Remove Duplicates from Sorted Array 把有一排序過的整數陣列,移除重複元素後,計算該陣列有多少唯一值。這題運用的概念是 In-place algorithm 原地演算法或是就地演算法,利用本身的資料結構進行變換的演算法。 Example 1 Input: nums = [1,1,2] Output: 2, nums = [1,2,_] Explanation: Your function should return k = 2, with the first two elements of nums being 1 and 2 respectively. It does not matter what you leave beyond the returned k (hence they are underscores). Example 2 Input: nums = [0,0,1,1,1,2,2,3,3,4] Output: 5, nums = [0,1,2,3,4,_,_,_,_,_] Explanation: Your function should return k = 5, with the first five elements of nums being 0, 1, 2, 3, and 4 respectively. It does not matter what you leave beyond the returned k (hence they are underscores). 解法 用 PHP 內建函數 array_unique() 移除陣列中的重複的值。 class Solution { /** * @param Integer[] $nums * @return Integer */ function removeDuplicates(&$nums) { $nums = array_unique($nums); return count($nums); } } 用原地演算法,判斷是否與上個元素是否相同,如果相同則移除該元素。 class Solution { /** *

[LeetCode]Remove Element

 Remove Element 設定一個只有整數的陣列,並移除指定的整數,最後返回該陣列剩幾個元素。 Example 1 Input: nums = [3,2,2,3], val = 3 Output: 2, nums = [2,2,_,_] Example 2 Input: nums = [0,1,2,2,3,0,4,2], val = 2 Output: 5, nums = [0,1,4,0,3,_,_,_] 解法 class Solution { /** * @param Integer[] $nums * @param Integer $val * @return Integer */ function removeElement(&$nums, $val) { $count = count($nums); for ($i = 0; $i < $count; $i++) { if ($nums[$i] === $val) unset($nums[$i]); } return count($nums); } }

[LeetCode]Merge Two Sorted Lists

圖片
Merge Two Sorted Lists 合併兩個已排序的鍊表 Example 1 Input: list1 = [1,2,4], list2 = [1,3,4] Output: [1,1,2,3,4,4] Example 2 Input: list1 = [], list2 = [] Output: [] Example 3 Input: list1 = [], list2 = [0] Output: [0] 解法 一開始的想法是取出兩個表的值進行排序,最後再重新產出新的鏈表。 /** * Definition for a singly-linked list. * class ListNode { * public $val = 0; * public $next = null; * function __construct($val = 0, $next = null) { * $this->val = $val; * $this->next = $next; * } * } */ class Solution { /** * @param ListNode $list1 * @param ListNode $list2 * @return ListNode */ function mergeTwoLists($list1, $list2) { $arr_dic = array(); while (true) { # 取出兩陣列的值 if (isset($list1->val)) $arr_dic[] = $list1->val; if (isset($list2->val)) $arr_dic[] = $list2->val; $list1 = $list1->next; $list2 = $list2->next;

[Linux]命令歷史

圖片
history:查詢歷史記錄 history -c:清空歷史命令 history N:顯示歷史中最近的N條命令 history -d:刪除某條歷史 history -a:將當前終端新執行的命令寫入歷史記錄文件(文件由變數HISTFILE決定,預設為用戶家目錄下的.bash_history) history -w /路徑/文件名.txt:將歷史記錄寫入指定文件 history -r:讀取歷史文件追加到歷史列表 !N:重覆執行第N條歷史 !!:重覆執行上一條命令

[LeetCode]Valid Parentheses

圖片
Valid Parentheses 檢查字串當中,是否包含有效的括號 ()、[]、{}。其有效定義為 括號的頭尾必須是相同類型的括號 括號的頭尾的順序必須正確 Example 1 Input: s = "()" Output: true Example 2 Input: s = "()[]{}" Output: true Example 3 Input: s = "(]" Output: false 解法 可用正規式進行比對,並把匹配的括號移除,反覆執行直到再也找不到對應的括號。但執行效率大多落在60-70ms,明顯不是最佳解。 class Solution { /** * @param String $s * @return Boolean */ function isValid($s) { if ( preg_match('/\(\)/', $s, $matches) || preg_match('/\[\]/', $s, $matches) || preg_match('/\{\}/', $s, $matches) ) { if (preg_match('/\(\)/', $s, $matches)) $s = str_replace('()', '', $s); if (preg_match('/\[\]/', $s, $matches)) $s = str_replace('[]', '', $s); if (preg_match('/\{\}/', $s, $matches)) $s = str_replace('{}', '', $s); if

[LeetCode]Longest Common Prefix

圖片
Longest Common Prefix 在一陣列中,找出所有字串共同的字首且長度最長的字首,如果沒有匹配的結果回傳空值。 Example 1 Input: strs = ["flower","flow","flight"] Output: "fl" Example 2 Input: strs = ["dog","racecar","car"] Output: "" Explanation: There is no common prefix among the input strings. 解法 先找出陣列中最短的字串,並利用該字串一一去比對,只要符合是共同字首且長度最長的字首變停止比對,反之回傳空值。 class Solution { /** * @param String[] $strs * @return String */ function longestCommonPrefix($strs) { // 找出陣列中長度最小的字串 $min_len = strlen($strs[0]); $now_len = strlen($strs[0]); $min_len_str = $strs[0]; foreach ($strs as $i => $str) { $now_len = strlen($str); if ($min_len > $now_len) { $min_len = $now_len; $min_len_str = $str; } } // 一一比對陣列中的字串 for ($i = $min_len; $i > 0; $i--) { $count = 0; foreach ($strs as $