待完成的
❎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. 唯一摩爾斯密碼詞

需要注意上圖中:
- java 語法 :
String [] morse = new String[] {/*這里面不要再使用[]*/}
wrong :
new String[] {[ele1, ele2, ....]};
right:
new String[] {ele1, ele2, ...};
- 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/
