ディレクトリ
✅108バイナリ検索ツリーに整然と配列
https://leetcode-cn.com/problems/convert-sorted-array-to-binary-search-tree/
説明
答え
PY
間違っ:Pythonの無い三項演算子(:)、クラス関数を呼び出すことはできませんか?
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def sortedArrayToBST(self, nums: List[int]) -> TreeNode:
return nums == null ? null : buildTree(nums, 0, nums.len)#tt Python没有三目运算符(?:)
#tt 而且py 自己定义的函数,也不是 像java 那里可以调用同 类 中的函数
def buildTree(nums: List[int], l: int, r: int) -> TreeNode:
if(l > r):
return null;
m = l + (r - l) / 2
root = nums[m]
root.left = buildTree(nums, l, m - 1)
root.right = buildTree(nums, m + 1, r)
return root
修正:
class Solution:
def sortedArrayToBST(self, nums: List[int]) -> TreeNode:
if not nums: # 注意要使用if not ,而不是 if nums == None
return None
else:
mid = len(nums) // 2;
tn = TreeNode(nums[mid])
nums1 = nums[0:mid]
nums2 = nums[mid+1: len(nums)]
tn.left = self.sortedArrayToBST(nums1)
tn.right = self.sortedArrayToBST(nums2)
return tn
'''执行用时 :
100 ms
, 在所有 Python3 提交中击败了
16.13%
的用户
内存消耗 :
15.4 MB
, 在所有 Python3 提交中击败了
49.31%
的用户'''
【藤堂は0208 revは】PY知識:if not x:
とif x is not None:
とif not x is None:
使用
https://blog.csdn.net/sasoritattoo/article/details/12451359
多くの場合、変数のコードは判決のいずれもありませんがあるかどうか、書き込みの主に3つのタイプがあります。
最初はありますif x is None
。
第ですif not x:
。
第三は、if not x is None
(より明確に理解文if not (x is None)
)。
あなたは、これが書き込みに異なるものではないと思われる場合、あなたは注意することができ、そしてピットがあります。コードを初めて目:
>>> x = 1
>>> not x
False
>>> x = [1]
>>> not x
False
>>> x = 0
>>> not x
True
>>> x = [0] # You don't want to fall in this one.
>>> not x
False
パイソン、Falseを、空の文字列「でなし」、0、空のリスト[] {}空の辞書、空のタプルは()、すなわち偽、と等価です。
not None == not False == not '' == not 0 == not [] == not {} == not ()
そのため、あなたは== Xを区別したい場合は、リストを使用している場合、[]とのx ==なしの両方の場合は、その後、この時点ではif not x:
、問題が発生します:
>>> x = []
>>> y = None
>>>
>>> x is None
False
>>> y is None
True
>>>
>>>
>>> not x
True
>>> not y
True
>>>
>>>
>>> not x is None
>>> True
>>> not y is None
False
>>>
たぶん、あなたは、xがNoneかどうかを確認したいのですが、混乱したx==[]
状況も判断に来て、この場合を区別することはできません。
Xなし、Falseを、空の文字列「に等しいことが明らかでなければならないような手法に慣れxがない場合pythoner」、0、空のリスト[] {}空の辞書、空のタプル()あなたを判断しないために仕事に影響を与えます。
以下の場合if x is not None
とif not x is None
書き込み、前者が後者は誤解を読者に可能性を秘めている一方で、約、より明確であることは明らかであるif (not x) is None
、したがって、前者お勧めしますが、これはGoogleの推奨スタイルです
結論:
if x is not None
最高の書かれた、明確な、エラーはこのようなアプローチに固執し、将来的に発生していないです。
ないのx構内使用した場合、このようなアプローチは、以下のとおりです。xはあなたのために決定された同等の明確なし、虚偽、空の文字列「」、0、空のリスト[] {}空の辞書、空のタプル(時間)には影響しませんことはありませんライン。
✅344反転文字列
https://leetcode-cn.com/problems/reverse-string
説明
関数を記述し、その役割は逆に、入力文字列にあります。フォームで指定された文字列の文字を入力文字列[]。
別の配列への追加の領域を割り当てないでください、あなたは、入力配列を変更置き、この問題に余分なスペースO(1)ソリューションを使用する必要があります。
あなたは、アレイ内のすべての文字がASCII表の印刷可能な文字であることを仮定してもよいです。
示例 1:
输入:["h","e","l","l","o"]
输出:["o","l","l","e","h"]
示例 2:
输入:["H","a","n","n","a","h"]
输出:["h","a","n","n","a","H"]
答え
以下のrange()
これらの筋肉の機能は本当に書かれている、いない脳のメモリ書き込みを、推測します。
class Solution:
def reverseString(self, s: List[str]) -> None:
"""
Do not return anything, modify s in-place instead.
"""
for i in range(len(s) // 2):
c = s[i]
s[i] = s[len(s) - 1 - i]
s[len(s) - 1 - i] = c
実際には、おかげrange
機能は右に開いています:
>>>range(10) # 从 0 开始到 10
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
所以、当len(s) == 4
、私たちは持っているlen(s) // 2 == 2
が、使用してrange(2)
発生しません:[0, 1]
、通知がまったく存在している2
ことが原因、安全ですので、我々はスワップをいけないs[2]
し、s[1]
(私たちは、スワップ後s[1]
にs[2]
✅944は、オーダーメイドの列を削除
https://leetcode-cn.com/problems/delete-columns-to-make-sorted
説明
答え
私はそれを理解し、すべての見つからない合适
ことがあり、それぞれ1が発見され、列のをcnt++
ポイントがあるので、どのように行列の列を横断します
使用して:あなたはPYを使用する場合 zip
class Solution:
def minDeletionSize(self, A: List[str]) -> int:
ret = 0
for i in zip(*A):#success, use: zip(A) will fail, so what is * means for a list???
if list(i) != sorted(i):
ret += 1
return ret
'''执行用时 :
92 ms
, 在所有 Python3 提交中击败了
94.28%
的用户
内存消耗 :
13.7 MB
, 在所有 Python3 提交中击败了
50.69%
的用户'''
パイソン zip
説明:
ZIP()関数は、パラメータの反復として対象とするために使用され、オブジェクトの対応する要素はタプルに充填し、これらのタプルのリストを返します。
各イテレータ矛盾、リストの最短長さの要素の数は、と使用し、同じオブジェクトを返す場合*
、オペレータの数を、タプルは、リストを抽出します。
異なるジップ3のPython 2とPythonで方法:メモリを低減するためにPythonの3.xのは、zip()
オブジェクトを返します。ショーのリストについては、手動での必要性list()
に変換します。
PY2での例:
>>>a = [1,2,3]
>>> b = [4,5,6]
>>> c = [4,5,6,7,8]
>>> zipped = zip(a,b) # 打包为元组的列表
[(1, 4), (2, 5), (3, 6)]
>>> zip(a,c) # 元素个数与最短的列表一致
[(1, 4), (2, 5), (3, 6)]
>>> zip(*zipped) # 与 zip 相反,*zipped 可理解为解压,返回二维矩阵式
[(1, 2, 3), (4, 5, 6)]
例えば中PY3
>>>a = [1,2,3]
>>> b = [4,5,6]
>>> c = [4,5,6,7,8]
>>> zipped = zip(a,b) # 返回一个对象
>>> zipped
<zip object at 0x103abc288>
>>> list(zipped) # list() 转换为列表
[(1, 4), (2, 5), (3, 6)]
>>> list(zip(a,c)) # 元素个数与最短的列表一致
[(1, 4), (2, 5), (3, 6)]
>>> a1, a2 = zip(*zip(a,b)) # 与 zip 相反,zip(*) 可理解为解压,返回二维矩阵式
>>> list(a1)
[1, 2, 3]
>>> list(a2)
[4, 5, 6]
>>>
2次元配列の中に深くダイブ:Uは、Cを使用する場合
int minDeletionSize(char** A, int ASize) {
int count = 0;
for(int i = 0;i < strlen(A[0]);i++){
for(int j = 0;j < ASize - 1;j++){
if(A[j][i] > A[j+1][i]){
count++;
break;
}
}
}
return count;
}
'''---
my '''
int minDeletionSize(char ** A, int ASize){
int cnt = 0;
int i = 0;
int j = 0;
int colNum = 0;
colNum = strlen(A[0]);
printf("colNum is %d", colNum);
for(; i < colNum; i++){
for(j = 0; j < ASize - 1; j++){
if(A[j][i] > A[j + 1][i]){
cnt++;
break;// only break inner for-loop
}
}
}
return cnt;
}
/*执行用时 :
32 ms
, 在所有 C 提交中击败了
26.53%
的用户
内存消耗 :
9.3 MB
, 在所有 C 提交中击败了
57.43%
的用户*/
✅181所得の従業員を管理職より
https://leetcode-cn.com/problems/employees-earning-more-than-their-managers
説明
Employee 表包含所有员工,他们的经理也属于员工。每个员工都有一个 Id,此外还有一列对应员工的经理的 Id。
+----+-------+--------+-----------+
| Id | Name | Salary | ManagerId |
+----+-------+--------+-----------+
| 1 | Joe | 70000 | 3 |
| 2 | Henry | 80000 | 4 |
| 3 | Sam | 60000 | NULL |
| 4 | Max | 90000 | NULL |
+----+-------+--------+-----------+
给定 Employee 表,编写一个 SQL 查询,该查询可以获取收入超过他们经理的员工的姓名。在上面的表格中,Joe 是唯一一个收入超过他的经理的员工。
+----------+
| Employee |
+----------+
| Joe |
+----------+
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/employees-earning-more-than-their-managers
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
答え
select e1.Name as Employee from Employee as e1 ,Employee as e2 where e1.ManagerId=e2.Id AND e1.Salary>e2.Salary
この問題は、主に自己接続の問題である「と、よりXXXよりも所有しています。」
SELECT E1.Name AS Employee FROM Employee as E1,Employee as E2
WHERE E1.ManagerId=E2.Id AND E1.Salary>E2.Salary;
:質問はE1,Employee as E2
ここで、表からXXXを選択し、WTF句こちら
など、SQL
私は、別名としての後ろに続きます
次のように通常は、あなたがテーブルを検索したい場合、SQLステートメントがあります
select * from user
他の人が見ることのために、自然にそれが目立つの役割に言及するように、理解し、精通になるために多くの時間を要し
select
username as 账号 ,
password as 密码,
mingzi as 名字,
zhengjianhao as 证件号,
dianhua as 电话,
zhuceriqi as 注册日期,
zhuangtai as 状态,
quanxian as 权限,
shengyutianshu as 剩余天数
from user
私は、別名としての後ろに続きます
【0207としてSQLを理解藤堂]
# Write your MySQL query statement below
SELECT
Name Employee # wtf Employee 可是 表名啊!!!
FROM
Employee AS a
WHERE
Salary > (SELECT
Salary
FROM
Employee
WHERE
Id = a.Managerid)
私は公式の答えは十分クリアしていることと思います。
SELECT
*
FROM
Employee AS a,
Employee AS b
WHERE
a.ManagerId = b.Id
AND a.Salary > b.Salary
;
---imp:(cause we only need `name`)
SELECT
a.Name AS 'Employee'
FROM
Employee AS a,
Employee AS b
WHERE
a.ManagerId = b.Id
AND a.Salary > b.Salary
;