➡️➡️➡️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);

✅ 1252. 奇数值单元格的数目

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


✅ 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}


✅ 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;
}

✅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;

☑︎237. 删除链表中的节点

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

今天看到微软的要求,对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/


posted on 2020-01-31 19:00  Paulkg12  阅读(457)  评论(0编辑  收藏  举报

导航