➡️➡️➡️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. 唯一摩尔斯密码词
需要注意上图中:
- 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);
✅ 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/