剑指 Offer 03——10
生活随笔
收集整理的這篇文章主要介紹了
剑指 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 -104. 二維數組中的查找
現有矩陣 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 False05. 替換空格
輸入:s = “We are happy.”
輸出:“We%20are%20happy.”
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 st06. 從尾到頭打印鏈表
輸入: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 nodeC++
/*** 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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎样的饮食习惯有助于保持健康?
- 下一篇: 【小白学习PyTorch教程】十六、在多