leetcode 0208

✅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 Noneif 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)

私は公式の答えは十分クリアしていることと思います。

https://leetcode-cn.com/problems/employees-earning-more-than-their-managers/solution/chao-guo-jing-li-shou-ru-de-yuan-gong-by-leetcode/


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
;

おすすめ

転載: www.cnblogs.com/paulkg12/p/12276013.html