@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;}
};

剑指 Offer 03——10相关推荐

  1. 【菜鸡新手 - 剑指offer 03】[2021/1/17一刷] 找出数组中重复的数字 -三种解法|| 物归原主,测试碰撞法 || hash表测试碰撞法 || 排序+遍历法 ||python

    文章目录 题目解读 A. 书籍推荐解法:我起名为" 物归原主,测试碰撞"法 B. 基础尝试1:hash表 + 碰撞测试 (效果还行) C. 基础尝试2:排序+遍历 (效果差) C. ...

  2. 剑指Offer #03 从尾到头打印链表(递归)

    题目来源:牛客网-剑指Offer专题 题目地址:从尾到头打印链表 题目描述 输入一个链表,按链表从尾到头的顺序返回一个ArrayList. 题目解析 方法一: 因为题目要求返回的顺序是从尾到头,所以我 ...

  3. 【LeetCode笔记】剑指 Offer 03. 数组中重复的数字(Java、哈希表、原地算法)

    文章目录 题目描述 思路 & 代码 二刷 题目描述 倒是和leetcode 287 寻找重复数很像..但是不能使用那道题的快慢指针法(也可能是我太菜了) 重点在于题干的描述[长度为 n 的数组 ...

  4. Leetcode 剑指 Offer 03. 数组中重复的数字 (每日一题 20210614)

    找出数组中重复的数字.在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次.请找出数组中任意一个重复 ...

  5. 【三种解法实现】剑指 Offer 03. 数组中重复的数字

    立志用最少的代码做最高效的表达 题目链接-->传送门 找出数组中重复的数字. 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数 ...

  6. leetcode 剑指 Offer 03. 数组中重复的数字

    找出数组中重复的数字. 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次.请找出数组中任意一个重 ...

  7. 剑指 Offer 03. 数组中重复的数字()

    在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次.请找出数组中任意一个重复的数字. 解题思路 原 ...

  8. 【算法】剑指 Offer 03. 数组中重复的数字

    1.概述 找出数组中重复的数字. 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次.请找出数组中 ...

  9. 剑指offer (03):数组中重复的数字 (C++ Python 实现)

    1 题目一 找出数组中重复的数字 1.1 描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次.请找出数组中任意一 ...

最新文章

  1. 最大子序和的golang实现
  2. js 判断多个关键词_2020关键词优化,做好这三点效果立现!
  3. javaweb_JSP 中文字符处理程序
  4. linux文件解压zip文件,linux下解压zip文件报错
  5. eventbus多个订阅_番石榴的EventBus –简单的发布者/订阅者
  6. bzoj3993 [SDOI2015]星际战争 二分答案+网络流检验
  7. 99年毕业设计获优的程序-图书管理程序 续
  8. c语言五子棋人机对弈算法,使用canvas基于AI算法实现人机对战之五子棋
  9. MaxScale中间件部署数据库读写分离
  10. 使用Linux的tzselect功能,查看各个洲都有哪些国家(地区)
  11. MythXinWCF通用宿主绿色版V1.2发布,及服务启动相关说明
  12. Matlab简单描点绘图
  13. 在线教育:最常见的直播课程有哪些?
  14. LaTeX数学公式-详细教程
  15. 小工具-FTP文件传输(FlashFXP4.4.2 )
  16. BZOJ 1984: 月下“毛景树” [树链剖分 边权]
  17. 2020年最新微博相关数据API+一站式获取个人微博信息+套娃、批量式获取微博用户信息
  18. dbm与mysql区别_dbm数据库
  19. 音频音乐与计算机的交融-音频音乐技术
  20. 全民wa矿小程序源码

热门文章

  1. 启明去端分享| ESP32-S3如何实现tcp_client和tcp_server9-07
  2. 启明云端分享|乐鑫ESP32-WROOM-32E和ESP32-WROOM-32UE两款模组的区别
  3. c语言链表p-%3enext,课程设计报告.c语言程序设计.pdf
  4. Git 下载很慢问题解决方案
  5. 浪潮as5300技术方案_混闪存储AS5300G5
  6. session过期情况下ajax请求不会触发重新登录的问题
  7. [笔记]路由器与交换机的区别
  8. C#基础巩固之基础类型
  9. 【easyui】treegrid逐级加载源码
  10. IOS TextField设置大全