➡️➡️➡️leetcode 需要每天打卡,養成習慣


待完成的

❎1252. 奇數值單元格的數目

https://leetcode-cn.com/problems/cells-with-odd-values-in-a-matrix/

  • 0207 有個 基數排序,請復習

  • 0206 有個py 語法,請復習

  • 再往前,動態編程,請復習

完成的

0204

https://www.cnblogs.com/paulkg12/p/12258422.html

0203 以前

{20-02-03 13:53} done:

✅ 620. 有趣的電影

編寫一個 SQL查詢,找出所有影片描述為非 boring (不無聊) 的並且 id 為奇數 的影片,結果請按等級 rating 排列。

例如,下表 cinema:

+---------+-----------+--------------+-----------+
|   id    | movie     |  description |  rating   |
+---------+-----------+--------------+-----------+
|   1     | War       |   great 3D   |   8.9     |
|   2     | Science   |   fiction    |   8.5     |
|   3     | irish     |   boring     |   6.2     |
|   4     | Ice song  |   Fantacy    |   8.6     |
|   5     | House card|   Interesting|   9.1     |
+---------+-----------+--------------+-----------+

對於上面的例子,則正確的輸出是為:


+---------+-----------+--------------+-----------+
|   id    | movie     |  description |  rating   |
+---------+-----------+--------------+-----------+
|   5     | House card|   Interesting|   9.1     |
|   1     | War       |   great 3D   |   8.9     |
+---------+-----------+--------------+-----------+

ans:


# Write your MySQL query statement below
SELECT * FROM cinema WHERE id & 1 AND description <> 'boring' ORDER BY rating DESC;

✅ 832 翻轉圖像

給定一個二進制矩陣 A,我們想先水平翻轉圖像,然后反轉圖像並返回結果。

水平翻轉圖片就是將圖片的每一行都進行翻轉,即逆序。例如,水平翻轉 [1, 1, 0] 的結果是 [0, 1, 1]。

反轉圖片的意思是圖片中的 0 全部被 1 替換, 1 全部被 0 替換。例如,反轉 [0, 1, 1] 的結果是 [1, 0, 0]。

int** flipAndInvertImage(int** A, int ARowSize, int *AColSizes, int** columnSizes, int* returnSize) {
    // 初始化返回值
    int ** flipped = malloc(ARowSize * sizeof(int *));
    *columnSizes = malloc(ARowSize * sizeof(int));
    *returnSize = ARowSize;
    for (int i = 0; i < ARowSize; i++) {
        // 行數組
        int *row = A[i];
        int rowItemCount = AColSizes[i];

        // 賦值第 i 行的 元素個數
        (*columnSizes)[i] = rowItemCount;
        int *rowFlipped = malloc(rowItemCount * sizeof(int));
        // 遍歷每一行 水平翻轉,反轉
        for (int j = 0; j < rowItemCount; j++) {
            // 取出原值
            int original = row[j];
            // 反轉
            int reversal = !original;
            // 逆序裝入
            int index = rowItemCount - j - 1;
            rowFlipped[index] = reversal;
        }
        flipped[i] = rowFlipped;
    }
    return flipped;
}

//swap and use ! to reverse
int tmp = 0;
for(int j = 0; j < len / 2; j ++){
	tmp = row[j];
	row[j] = !row[len - j - 1];
	row[len - j -1] = !tmp;
}

int** flipAndInvertImage(int** A, int ASize, int* AColSize, int* returnSize, int** returnColumnSizes){
	// useless init
	*returnSize = ASize;
	*returnColumnSizes = malloc(ASize * sizeof(int));

    for (int i = 0; i < ASize; i++) {
	    // 行數組
	    int *row = A[i];
	    int rowItemCount = AColSize[i];
	    *returnColumnSizes = AColSize[i];
	    //swap and use ! to reverse
		int tmp = 0;
		for(int j = 0; j < len / 2; j ++){
			tmp = row[j];
			row[j] = !row[len - j - 1];
			row[len - j -1] = !tmp;
		}
    }

    return A;
}

👆 的c 代碼 估計仍舊 是 caller 指針 釋放的笨毛病。算了 

class Solution {
    public int[][] flipAndInvertImage(int[][] A) {
        int C = A[0].length;
        for (int[] row: A)
            for (int i = 0; i < (C + 1) / 2; ++i) {
                int tmp = row[i] ^ 1;
                row[i] = row[C - 1 - i] ^ 1;
                row[C - 1 - i] = tmp;
            }

        return A;
    }
}

✅ 1309. 解碼字母到整數映射

第一個思考版本 與 回答 (代碼並非最后ok 的代碼)

class Solution {
    public String freqAlphabets(String s) {
        StringBuidler ret = new StringBuidler();
        for(int i = 0; i < s.length; i++) {
            if(s.charAt[i + 2] == '#') {
                // 如何把 s.charAt[i] 和 s.charAt[i + 1] 轉為 整數呢?parseInt(s.substring(i, i+2))
            } else {
                ret.append((char)('a' + s.charAt(i) - '0' - 1));
            }
        }
    }
}

their c:

char * freqAlphabets(char * s){
    int L = strlen(s);
    char *ret = malloc(L + 1);
    int retLen = 0;
    int i;
    int tmp;
    memset(ret, 0, L + 1);
    for (i = 0; i < L; i++) {
        if (i + 2 < L && s[i + 2] == '#') {
            tmp = (s[i] - '0') * 10 + s[i + 1] - '0';
            i += 2;
        } else {
            tmp = s[i] - '0';
        }
        if (tmp < 1 || tmp > 26) {
            continue;
        }
        ret[retLen++] = tmp + 'a' - 1;
    }
    return ret;
}

✅ 226. 翻轉二叉樹

https://leetcode-cn.com/problems/invert-binary-tree

✅ 804. 唯一摩爾斯密碼詞

需要注意上圖中:

  1. java 語法 :
String [] morse = new String[] {/*這里面不要再使用[]*/}


wrong : 

new String[] {[ele1, ele2, ....]};

right:

new String[] {ele1, ele2, ...};
  1. java api: String.toCharArray()
for(char c : word.toCharArray()) {

✅ 1309. 解碼字母到整數映射

https://leetcode-cn.com/problems/decrypt-string-from-alphabet-to-integer-mapping

第一個思考版本 與 回答 (代碼並非最后ok 的代碼)

class Solution {
    public String freqAlphabets(String s) {
        StringBuidler ret = new StringBuidler();
        for(int i = 0; i < s.length; i++) {
            if(s.charAt[i + 2] == '#') {
// 思考 的地方 ,得到了解答:
                // 如何把 s.charAt[i] 和 s.charAt[i + 1] 轉為 整數呢?:::>>>>>parseInt(s.substring(i, i+2))
            } else {
                ret.append((char)('a' + s.charAt(i) - '0' - 1));
            }
        }
    }
}

java 的 ! 的操作 不像 c 那樣自由,!不要使用在int 變量上

(c 可以對任何int 進行這個!操作)

我認為:! 只能用在 boolean 上。

✅ 832. 翻轉圖像

https://leetcode-cn.com/problems/flipping-an-image


✅ 627. 交換工資 (實際上是交換性別) sql

# 給定一個 salary 表,如下所示,有 m = 男性 和 f = 女性 的值。交換所有的 f 和 m 值(例如,將所有 f 值更改為 m,反之亦然)。要求只使用一個更新(Update)語句,並且沒有中間的臨時表。

update salary set sex = if(sex = "m", "f", "m");

✅ 461. 漢明距離

c ^ 是異或操作

int hammingDistance(int x, int y){
    int z = x ^ y;
    int sum = 0;
    while(z){
        sum += z&1;
        z >>= 1;
    }
    return sum;
}

✅1304. 和為零的N個唯一整數

https://leetcode-cn.com/problems/find-n-unique-integers-sum-up-to-zero/

體會:c中,malloc 后的新建的數組,默認不是0(java new 的int[] 會是0, c 非常初始)

為此,你需要memset

int* ret = (int*)malloc(sizeof(int) * n);

memset(ret, 0x00, sizeof(int) * n);
  • {20-02-02 14:52}

✅ 1252. 奇數值單元格的數目

https://leetcode-cn.com/problems/cells-with-odd-values-in-a-matrix/


  • {20-02-01 10:20}

✅ 595. 大的國家
https://leetcode-cn.com/problems/big-countries/

SELECT
    name, population, area
FROM
    world
WHERE
    area > 3000000 OR population > 25000000
;

✅1021. 刪除最外層的括號
https://leetcode-cn.com/problems/remove-outermost-parentheses/

c語言的字符串初始化 方法

    //定義字符串的幾種方式
    //字符串和字符數組的區別:最后一位是否是空字符
    char names1[] = {'j', 'a', 'c', 'k', '\0'};
    char names2[50] = "jack";
    char * names3 = "jack";


//------------
通過數組 創建

創建方法1 char *str[4] = "abc";
創建方法2 char str[4] = {'a','b','c','\0'};
  • 你不可以做的:

int someLength = strlen(paramString);
char newCharArr[someLength] = "uselessTmpInitStringHere";// 數組初始化 需要確定的 length , 而不是 需要runtime 計算出來的someLength

c 不能返回函數體內的 一個 地址(指針,eg : int sums[] ;//can't return array(aka. prt)),可以返回一個 值 (eg: sum)

參考: https://blog.csdn.net/haiwil/article/details/6691854/

數組是不能作為函數的返回值的,原因是編譯器把數組名認為是局部變量(數組)的地址。tt: 你可以使用static 令這個局部 數組 活得久一點

✅938. 二叉搜索樹的范圍和
https://leetcode-cn.com/problems/range-sum-of-bst/

提升如下,好一點:

done at {20-02-01 12:46}


  • {20-01-31 18:53}

✅ 1323. 6 和 9 組成的最大數字

https://leetcode-cn.com/problems/maximum-69-number/

int maximum69Number (int num){
    int n = num;
    int ret = num;
    int tmp = 0;
    int recorder = 1;
    while(n){
        tmp = n % 10;// 取當前走到的num(實際上是變化的n 的 最后)一位
        if(tmp == 6) {// 如果這一位是6(因為如果 n % 10 == 6 , 那么這一位就是6)
            ret = num + recorder * 3; // 那么返回值就是 num + 進制記錄值 乘以 3 
        }
        n /= 10; // 還沒有 遍歷完 n 的所有 十進制 位的話, 就繼續通過/ 這個方式令recorder 左移
        recorder *= 10;// 每左移一位,recorder 就會 10 倍一下
    }
    return ret;
}
  • {20-01-31 12:14}

✅1221. 分割平衡字符串

https://leetcode-cn.com/problems/split-a-string-in-balanced-strings/submissions/

✅182. 查找重復的電子郵箱

https://leetcode-cn.com/problems/duplicate-emails/

這是關於sqlite 的語句

  • 方法一 使用 臨時表 和 group by
select Email from
(
  select Email, count(Email) as num
  from Person
  group by Email
) as statistic
where num > 1
;

作者:LeetCode
鏈接:https://leetcode-cn.com/problems/duplicate-emails/solution/cha-zhao-zhong-fu-de-dian-zi-you-xiang-by-leetcode/
來源:力扣(LeetCode)
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
  • 方法二 使用 having語句
select Email
from Person
group by Email
having count(Email) > 1;

{20-01-30 16:59}

☑︎237. 刪除鏈表中的節點

https://leetcode-cn.com/problems/delete-node-in-a-linked-list/

{20-01-30 12:03}

今天看到微軟的要求,對coding 和算法要求比較多。

☑︎ 鏈表到整數

https://leetcode-cn.com/problems/convert-binary-number-in-a-linked-list-to-integer/

思路是二進制到10進制的知識:


體會:c語言:

全局變量在定義時不初始化則初始值是0,局部變量在定義時不初始化則初始值是不確定的。局部變量在使用之前一定要先賦值,如果基於一個不確定的值做后續計算肯定會引入Bug。

done {20-01-30 16:57}

尚需挑戰完成的

☒ 動態規划 dp series

https://leetcode-cn.com/tag/dynamic-programming/



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM