日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

剑指 Offer 03——10

發布時間:2024/10/8 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 剑指 Offer 03——10 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

@Author:Runsen

決定重新刷劍指 Offer,C++和Py版本

03. 數組中重復的數字

輸入:
[2, 3, 1, 0, 2, 5, 3]
輸出:2 或 3

方法: 排序 遍歷、set和map

C++

class Solution { public:int findRepeatNumber(vector<int>& nums) {// 排序 遍歷 32 ms 22.4 MB// sort(nums.begin(),nums.end());// for(int i = 0; i <nums.size()-1;i++) {// if(nums[i] == nums[i+1]){// return nums[i];// }// }// return 0;// unordered_set 52 ms 26.7 MB// unordered_set<int> set;// for (int num :nums){// if(set.count(num) == 1 ){// return num;// }else{// set.insert(num);// }// }// return 0;// map 56 ms 26.8 MB unordered_map<int,bool> map;for(int num :nums){if (map[num]) {return num;}else{map[num] = true;}}return -1;} };

python

class Solution:def findRepeatNumber(self, nums: List[int]) -> int:# nums.sort()# for i in range(len(nums)):# if nums[i] == nums[i+1]:# return nums[i]# return -1# newset = set()# for i in nums:# if i in newset:# return i# else:# newset.add(i)# return -1newmap = {}for i in nums:if i in newmap:return ielse:newmap[i] = 1return -1

04. 二維數組中的查找

現有矩陣 matrix 如下:

[
[1, 4, 7, 11, 15],
[2, 5, 8, 12, 19],
[3, 6, 9, 16, 22],
[10, 13, 14, 17, 24],
[18, 21, 23, 26, 30]
]
給定 target = 5,返回 true。

給定 target = 20,返回 false。

方法:暴力和從右上角到左下角

C++

class Solution { public:bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {// 暴力 12 ms 12.7 MB// for(int i = 0; i < matrix.size(); i++ ){// for (int j = 0; j <matrix[0].size();j ++) {// if( matrix[i][j] == target) {// return true;// }// }// }// return false;// 從右上角到左下角 20 ms 12.8 MB if (matrix.empty() || matrix[0].empty()) return false;int m = matrix.size();int row =0;int col = matrix[0].size() -1 ;while (row < m && col >=0){if( matrix[row][col] == target){return true;}else if(matrix[row][col] > target){col--;}else{row++;}}return false;} };

python

class Solution:def findNumberIn2DArray(self, matrix: List[List[int]], target: int) -> bool:# 暴力 56 ms 19 MB# for i in range(len(matrix)):# for j in range(len(matrix[0])):# if matrix[i][j] == target:# return True# return False# 32 ms 18.9 MBif not matrix:return Falserows = len(matrix)cols = len(matrix[0])row = 0col = cols -1 while (row < rows) and (col >=0 ):if matrix[row][col] == target:return Trueelif matrix[row][col] > target:col = col - 1 else:row = row + 1 return False

05. 替換空格

輸入:s = “We are happy.”
輸出:“We%20are%20happy.”

class Solution { public:string replaceSpace(string s) {// new string 0 ms 6.1 MB// string st;// for(char c: s){// if( c == ' '){// st += "%20";// }else{// st += c;// }// }// return st;// }// C++ 的string可變 0 ms 6 MBint len = s.size();int cout = 0;for(char c: s){if(c == ' '){cout++;}}s.resize(len + 2 * cout);for(int i =len-1 , j = s.size() -1 ; i < j ;i--,j--){if (s[i] != ' '){s[j] = s[i];}else{s[j] = '0';s[j-1] = '2';s[j-2] = '%';j -=2; }}return s;}};

Python

class Solution:def replaceSpace(self, s: str) -> str:# 32 ms 15.1 MBst = ""for i in s:if i == ' ':st += "%20"else:st += ireturn st

06. 從尾到頭打印鏈表

輸入:head = [1,3,2]
輸出:[2,3,1]

C++

class Solution { public:// vector<int> reversePrint(ListNode* head) {// // 4 ms 8.4 MB// vector<int> vet;// while (head){// vet.push_back(head->val);// head = head->next;// }// reverse(vet.begin(),vet.end());// return vet;// }// 4 ms 10.9 MBvector<int> reversePrint(ListNode* head) {if (head == NULL) return {};vector<int> pre = reversePrint(head->next);pre.push_back(head->val);return pre;} };

python

class Solution:def reversePrint(self, head: ListNode) -> List[int]:# 遞歸 120 ms 24.3 MB# return self.reversePrint(head.next) + [head.val] if head else []# 數組反轉 48 ms 16.3 MBif not head : return [] stack = []while head:stack.append(head.val)head = head.next return stack[::-1]

07. 重建二叉樹

class Solution:def buildTree(self, preorder: List[int], inorder: List[int]) -> TreeNode:# 遍歷 132 ms 87.2 MBif len(preorder) == 0: return Nonenode = TreeNode(preorder[0])index = inorder.index(node.val)node.left = self.buildTree(preorder[1:index + 1],inorder[:index])node.right = self.buildTree(preorder[index + 1 :],inorder[index+1:])return node

C++

/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/ class Solution { public:TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {if (preorder.empty() || inorder.empty()){return NULL;}// 尋找根節點TreeNode *root = new TreeNode(preorder[0]);auto index = find(inorder.begin(),inorder.end(), preorder[0]);vector<int> ileft(inorder.begin(),index);vector<int> lright(index+1,inorder.end());int len = ileft.size();vector<int> pleft(preorder.begin()+1,preorder.begin() +1+ len);vector<int> pright(preorder.begin() + 1+ len, preorder.end());root->left = buildTree(pleft,ileft);root->right = buildTree(pright,lright);return root;} }; 與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的剑指 Offer 03——10的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。