仕事探し - 体力づくり 8 - プログラミング - Jianzhi オファー - JZ3、JZ4、JZ5、JZ7、JZ8、JZ9、JZ10、JZ11、JZ12、JZ13、JZ14

JZ3 配列の繰り返し番号

説明

長さ n の配列内のすべての数値は、0 から n-1 の範囲にあります。配列内のいくつかの数字が繰り返されていますが、繰り返されている数字の数はわかりません。また、各数字が何回繰り返されるかは不明です。配列内で繰り返される数字を見つけてください。たとえば、入力が長さ 7 の配列 [2,3,1,0,2,5,3] の場合、対応する出力は 2 または 3 になります。不正な入力がある場合、出力 -1


データ範囲:0 \leqslant n \leqslant 10000
高度: 時間複雑度 の上)、空間複雑度の上)

例 1

输入: [2,3,1,0,2,5,3]
返回值:2
说明:2或3都是对的

コード

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param numbers int整型一维数组 
# @return int整型
#
class Solution:
    def duplicate(self , numbers: List[int]) -> int:
        # write code here
        for i in numbers:
            if numbers.count(i)>=2:
                 return i
        return -1

セルフテスト結果

運用実績


 

JZ4二次元配列で検索

説明

2 次元配列 (各 1 次元配列の長さは同じ) では、各行は左から右へ昇順で並べ替えられ、各列は上から下へ昇順で並べ替えられます。関数を完成させ、このような二次元配列と整数を入力し、整数が配列に含まれているかどうかを判断してください。
[
[1,2,8,9],
[2,4,9,12],
[4,7,10,13],
[6,8,11,15]

]
ターゲット = 7 の場合、true を返します。
target = 3 の場合、false を返します。

データ範囲: 行列の長さと幅が を満たし5000 \leqslant n,m \leqslant 500、行列の値が0\leqslant val\leqslant109
高度を満たします: 空間の複雑さ O(1), 時間の複雑さ O(n+m)

例 1

输入:7,[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]
返回值:true
说明:存在7,返回true  

例 2

输入:1,[[2]]
返回值:false

例 3

输入:3,[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]
返回值:false
说明:不存在3,返回false 

コード

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param target int整型 
# @param array int整型二维数组 
# @return bool布尔型
#
class Solution:
    def Find(self , target: int, array: List[List[int]]) -> bool:
        # write code here
        for i in array:
            if target in i :
                return True
        return False

セルフテスト結果

 

運用実績


JZ5 置換スペース

説明

文字列 s の各スペースを "%20" に置き換える関数を実装してください。
たとえば、文字列が We Are Happy の場合、置換後の文字列は We%20Are%20Happy になります。


データ範囲:  0\leqslant len(s)\leqslant1000 . 文字列内の文字が英大文字、英小文字、およびスペースのいずれかであることを確認してください。

例 1

输入:"We Are Happy"
返回值:"We%20Are%20Happy"

例 2

输入:" "
返回值:"%20"

コード

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param s string字符串 
# @return string字符串
#
class Solution:
    def replaceSpace(self , s: str) -> str:
        # write code here
        results = ''
        for i in s:
            if i == " ":
                results +="%20"
            else:
                results +=i
        return results

セルフテスト結果

 

運用実績


JZ7 再構築バイナリ ツリー

説明

n 個のノードを持つ二分木の前順トラバーサルと順次トラバーサルの結果が与えられたら、二分木を再構築して、その先頭ノードを返してください。
たとえば、事前順序トラバーサル シーケンス {1,2,4,7,3,5,6,8} とインオーダー トラバーサル シーケンス {4,7,2,1,5,3,8,6 を入力します。図に示すように、再構成は次のとおりです。

 

ヒント:

1.vin.length == pre.length

2. pre と vin の両方に繰り返し要素がない

3. vin に現れる要素はすべて pre に現れる

4.ルートノードに戻るだけで、システムは回答比較のためにツリー全体を自動的に出力します

データ範囲:  n\leqslant 2000、ノードの値 (\displaystyle -10000) \leqslant val\leqslant 10000

要件: 空間の複雑さ の上)、時間の複雑さ の上)

例 1

输入:[1,2,4,7,3,5,6,8],[4,7,2,1,5,3,8,6]
返回值:{1,2,3,4,#,5,6,#,7,#,#,8}
说明:返回根节点,系统会输出整颗二叉树对比结果,重建结果如题面图示 

 

例 2

输入:[1],[1]
返回值:{1}

例 3

输入:[1,2,3,4,5,6,7],[3,2,4,1,6,5,7]
返回值:{1,2,5,3,4,6,7}

コード

# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param pre int整型一维数组 
# @param vin int整型一维数组 
# @return TreeNode类
#
class Solution:
    def reConstructBinaryTree(self , pre: List[int], vin: List[int]) -> TreeNode:
        # write code here
        if not pre:
            return None
        root = TreeNode(pre[0])
        tmp = vin.index(pre[0])
        root.left = self.reConstructBinaryTree(pre[1:tmp+1], vin[:tmp])
        root.right = self.reConstructBinaryTree(pre[tmp+1:], vin[tmp+1:])
        return root

セルフテスト結果

  運用実績


 

JZ8 バイナリ ツリーの次のノード

説明

バイナリ ツリー内のノードが与えられた場合、インオーダー トラバーサル順序で次のノードを見つけて返します。ツリー内のノードには、左右の子ノードが含まれているだけでなく、親ノードを指す次のポインターも含まれていることに注意してください。次の図は、9 つ​​のノードを持つ二分木を示しています。ツリー内の親ノードから子ノードへのポインターは実線で表され、子ノードから親ノードへのポインターは破線で表されます。

 

输入:{8,6,10,5,7,9,11},8

返回:9

分析: このアセンブリによって渡されたサブツリーのルート ノードは、実際にはツリー全体であり、順序どおりの走査は {5, 6, 7, 8, 9, 10, 11} です。ルート ノードの次のノード 8は 9 であり、{ 9,10,11} を返す必要があります。背景はサブツリーの次のノードのみを出力するため、下の図に示すように 9 のみが出力されます。実際には、左右にポインターがあります。子、および親ノードへのポインター (下の図には描かれていません)

データ範囲: ノードの数が を満たし 1\leqslant n\leqslant 50 、ノードの値が を満たします 1\leqslant val\leqslant 100

要件: 空間の複雑さ O(1) 、時間の複雑さ の上)

説明を入力してください:

入力は 2 つのセクションに分割されます. 最初のセクションはバイナリ ツリー全体であり、2 番目のセクションは指定されたバイナリ ツリー ノードの値です. バックグラウンドでは、これら 2 つのパラメータをバイナリ ツリーの部分的なサブツリーに組み立てて、関数 GetNext ユーザーが取得する 入力にはサブツリー ルート ノードが 1 つだけあります

戻り値の説明:

渡されたサブツリーのルート ノードの次のノードを返します。バックグラウンドはこのノードを出力します。

例 1

输入:{8,6,10,5,7,9,11},8 
返回值:9 

例 2

输入:{8,6,10,5,7,9,11},6 
返回值:7 

例 3

输入:{1,2,#,#,3,#,4},4 
返回值:1 

例 4

输入:{5},5 
返回值:"null" 
说明:不存在,后台打印"null"   

コード

# -*- coding:utf-8 -*-
# class TreeLinkNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
#         self.next = None
class Solution:
    def GetNext(self, pNode):
        # write code here
        if pNode.right:
            rchild = pNode.right
            while rchild.left:
                rchild = rchild.left
            return rchild
        while pNode:
            if pNode.next:
                if pNode.next.left == pNode:
                    return pNode.next
                pNode = pNode.next
            else:
                return None

セルフテスト結果

 

 運用実績


JZ9 は 2 つのスタックを持つキューを実装します

説明

2 つのスタックを使用してキューを実装し、n 個の要素を使用して、キューの末尾に整数を n 回挿入 (プッシュ) し、キューの先頭にある整数を削除 (ポップ) する機能を n 回完了します。キュー内の要素は int 型です。操作が正当であること、つまり、ポップ操作が実行されるときに要素がキューに存在することを確認してください. データ範囲: 要件:


nn\leqslant 1000
個の要素を格納するスペースの複雑さは であり の上) 、挿入と削除の時間の複雑さは です.O(1)

例 1

输入:["PSH1","PSH2","POP","POP"]
返回值:1,2

説明: "PSH1": キューの最後に 1 を挿入することを意味します "PSH2": キューの最後に 2 を挿入することを意味します "POP": 要素を削除することを意味します。先入れ先出し => 1 を返す "POP ": 要素を削除することを意味し、先入れ先出し => 2 を返す

例 2

输入:["PSH2","POP","PSH1","POP"] 
返回值:2,1 

コード

バージョン 1

# -*- coding:utf-8 -*-
class Solution:
    def __init__(self):
        self.stack1 = []
        self.stack2 = []
    def push(self, node):
        # write code here
        self.stack1.append(node)
    def pop(self):
        # return xx
        if len(self.stack2) == 0:
            while len(self.stack1)!=0:
                self.stack2.append(self.stack1.pop())
        value= self.stack2.pop()
        return value

バージョン 2

# -*- coding:utf-8 -*-
class Solution:
    def __init__(self):
        self.stack1 = []
        self.stack2 = []
    def push(self, node):
        # write code here
        self.stack1.append(node)
    def pop(self):
        # return xx
        return self.stack1.pop(0)

セルフテスト結果

運用実績


JZ10 フィボナッチ数列

説明

フィボナッチ数列は皆さんご存知のとおり、正の整数 n を入力する必要があり、フィボナッチ数列の n 番目の項目を出力してください。
フィボナッチ数列は満足のいく fib(x)=\left\{ \begin{array}{ll} 1&x=1,2 \\ fib(x-1)+fib(x-2)&x>2\end{array} \right. 数列です
データ範囲: 1\leqslant n\leqslant 40
要件: 空間複雑度 O(1) , 時間複雑度の上) , この質問には時間複雑度の O(ログ) 解もあります

説明を入力してください:

正の整数 n

戻り値の説明:

正の整数を出力します。

例 1

输入:4
返回值:3  

説明: フィボナッチ数列の定義によると、fib(1)=1、fib(2)=1、fib(3)=fib(3-1)+fib(3-2)=2、fib(4 ) =fib(4-1)+fib(4-2)=3 なので、答えは 3 です。

例 2

输入:1
返回值:1

例 3

输入:2
返回值:1

コード

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param n int整型 
# @return int整型
#
class Solution:
    def Fibonacci(self , n: int) -> int:
        # write code here
        a = 1 # n-1
        b = 1 # n-2
        c = 1 # n 
        for i in range(3, n+1):
            c = a+b # fib(n)=fib(n-1)+fib(n-2)
            b = a   
            a = c   
        return c   

セルフテスト結果

 運用実績


JZ11 回転配列の最小数

説明

[1,2,3,4,5] などの長さ n の非降順配列がある場合は、それを回転します。つまり、配列の最初のいくつかの要素を配列の最後に移動して、回転した配列にします。 、たとえば、[3,4,5,1,2] や [4,5,1,2,3] となります。すみません、このような回転配列が与えられた場合、配列内の最小値を見つけてください。


データ範囲:  1\leqslant n\leqslant10000 、配列内の任意の要素の値: 0\leqslant val\leqslant10000

要件: 空間の複雑さ:  O(1) 、時間の複雑さ: O(ログ)

例 1

输入:[3,4,5,1,2]
返回值:1

例 2

输入:[3,100,200,3]
返回值:3

コード

1.数组为空
2.部分旋转,例如由(1,2,3,4,5)旋转为(3,4,5,1,2),此时只需要遍历数组,找到当前数比前面的数小的数即可。
3.完全旋转,例如由(1,2,3,4,5)旋转为(1,2,3,4,5),此时第一个数最小。
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param rotateArray int整型一维数组 
# @return int整型
#
class Solution:
    def minNumberInRotateArray(self , rotateArray: List[int]) -> int:
        # write code here
        if len(rotateArray) == 0:
            return -1
        for i in range(len(rotateArray)-1):
            if rotateArray[i] > rotateArray[i+1]:
                return rotateArray[i+1]
        return rotateArray[0]

セルフテスト結果

 運用実績


JZ12 マトリックスのパス

説明

n×mの行列に長さlenの文字列のすべての文字を含むパスがあるかどうかを判定する関数を設計してください。パスはマトリックス内の任意のグリッドから開始でき、各ステップでマトリックス内の上下左右に 1 つのグリッドを移動できます。パスがマトリックス内のグリッドを通過する場合、そのパスは再びグリッドに入ることができません。たとえば、[[a、b、c、e]、[s、f、c、s]、[a、d、e、e]]行列には​​文字列「bcced」のパスが含まれていますが、行列には​​「abcb」のパスは含まれていません。文字列の最初の文字 b が行列の最初の行の 2 番目のグリッドを占めた後パスは再び入ることができません グリッド。
データ範囲: 0\leqslant n,m \leqslant20 、 1\leqslant len\leqslant 25

例 1

输入:[[a,b,c,e],[s,f,c,s],[a,d,e,e]],"abcced"
返回值:true 

例 2

输入:[[a,b,c,e],[s,f,c,s],[a,d,e,e]],"abcb"
返回值:false

コード

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param matrix char字符型二维数组 
# @param word string字符串 
# @return bool布尔型
#
class Solution:
    def hasPath(self , matrix: List[List[str]], word: str) -> bool:
        # write code here
        if len(matrix) == 0:
            return False
        for i in range(len(matrix)):
            for j in range(len(matrix[0])):
                if self.backtrack(matrix, word,0,i,j):
                    return True
        return False
    

    def backtrack(self, matrix, word, index, i, j):
        if index == len(word):
            return True
        if i < 0 or i >= len(matrix) or j < 0 or j >= len(matrix[0]) or (matrix[i][j]!=word[index]):
            return False
        temp = matrix[i][j]
        matrix[i][j] = '*'
        if (self.backtrack(matrix,word,index+1,i+1,j)
        or self.backtrack(matrix,word,index+1,i,j+1)
        or self.backtrack(matrix,word,index+1,i-1,j)
        or self.backtrack(matrix,word,index+1,i,j-1)):
            return True
        matrix[i][j] = temp
        return False
        

セルフテスト結果

運用実績


JZ13ロボットの可動範囲

説明

地面には、rows 行と cols 列のグリッドがあります。座標は [0,0] から [rows-1,cols-1] までです。ロボットは座標 [0,0] のグリッドから移動を開始し、一度に上下左右に 1 つのグリッドしか移動できませんが、行の桁の合計が一致するグリッドには入ることができません。座標と列座標がしきい値よりも大きい。たとえば、しきい値が 18 の場合、3+5+3+7 = 18 であるため、ロボットは正方形 [35,37] に入ることができます。ただし、正方形 [35,38] には 3+5+3+8 = 19 なので入りません。ロボットはいくつのグリッドに到達できますか?


データ範囲: 0\leqslant しきい値\leqslant 15、 1\leqslant 行、列\leqslant 100


高度: 空間複雑度 O(nm) 、時間複雑度 O(nm)

例 1

输入: 1,2,3
返回值:3

例 2

输入: 0,1,3 
返回值:1

例 3

输入: 10,1,100
返回值:29

説明: [0,0]、[0,1]、[0,2]、[0,3]、[0,4]、[0,5]、[0,6]、[0,7]、 [0,8]、[0,9]、[0,10]、[0,11]、[0,12]、[0,13]、[0,14]、[0,15]、[0 ,16]、[0,17]、[0,18]、[0,19]、[0,20]、[0,21]、[0,22]、[0,23]、[0,24 ]、[0,25]、[0,26]、[0,27]、[0,28] この29種類、次の[0,29]、[0,30]、[0,31]などに到達できません

例 4

输入: 5,10,10
返回值:21

コード

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param threshold int整型 
# @param rows int整型 
# @param cols int整型 
# @return int整型
#
class Solution:
    def movingCount(self, threshold, rows, cols):
        # write code here
        self.rows = rows
        self.cols = cols
        self. dict = set()
        self.dfs(threshold, 0, 0)
        return len(self.dict)

        
    def sum(self, i, j):
        sum = (i//10)+(i%10)+(j//10)+(j%10)
        return sum

    def dfs(self,threshold, i,j):
        if (not self.sum(i,j) <= threshold) or (i,j) in self.dict:
            return 
        self.dict.add((i,j))
        if i != self.rows-1:
            self.dfs(threshold, i+1, j)
        if j != self.cols-1:
            self.dfs(threshold, i, j+1)
        

セルフテスト結果

 運用実績


JZ14 ロープを切る

説明

長さ n のロープが与えられた場合、ロープを整数の長さの m セグメントに切断してください (m と n は両方とも整数で、n > 1 および m > 1、m <= n )。各ロープの長さは次のように記録されます。 k [1],...,k[m] . k[1]*k[2]*...*k[m] の可能な最大積は? たとえば、ロープの長さが 8 の場合、それぞれ 2、3、3 の長さの 3 つのセクションに切断し、このとき得られる最大積は 18 です。


データ範囲:2\leqslant n\leqslant 60
高度: 空間の複雑さ O(1)、時間の複雑さ の上)

説明を入力してください:

数値 n を入力します。意味についてはタイトルを参照してください。

戻り値の説明:

答えを出力します。

例 1

输入:8
返回值:18

説明: 8 = 2 +3 +3 , 2*3*3=18

例 2

输入:2
返回值:1

説明: m>1 なので、長さ 1 の 2 本のロープに切断します。

コード

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param number int整型 
# @return int整型
#
class Solution:
    def cutRope(self , number: int) -> int:
        # write code here
        if number < 2:
            return 0
        elif number == 2:
            return 1
        elif number == 3:
            return 2
        else:
            x = number % 3
            y = number // 3
            if x == 0:
                res=3**y
            elif x == 1:
                res=3**(y-1)*4
            else:
                res=3**y*2
            return res

セルフテスト結果

 

 運用実績

おすすめ

転載: blog.csdn.net/XiaoyYidiaodiao/article/details/127728510