剑指 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;}
};
剑指 Offer 03——10相关推荐
- 【菜鸡新手 - 剑指offer 03】[2021/1/17一刷] 找出数组中重复的数字 -三种解法|| 物归原主,测试碰撞法 || hash表测试碰撞法 || 排序+遍历法 ||python
文章目录 题目解读 A. 书籍推荐解法:我起名为" 物归原主,测试碰撞"法 B. 基础尝试1:hash表 + 碰撞测试 (效果还行) C. 基础尝试2:排序+遍历 (效果差) C. ...
- 剑指Offer #03 从尾到头打印链表(递归)
题目来源:牛客网-剑指Offer专题 题目地址:从尾到头打印链表 题目描述 输入一个链表,按链表从尾到头的顺序返回一个ArrayList. 题目解析 方法一: 因为题目要求返回的顺序是从尾到头,所以我 ...
- 【LeetCode笔记】剑指 Offer 03. 数组中重复的数字(Java、哈希表、原地算法)
文章目录 题目描述 思路 & 代码 二刷 题目描述 倒是和leetcode 287 寻找重复数很像..但是不能使用那道题的快慢指针法(也可能是我太菜了) 重点在于题干的描述[长度为 n 的数组 ...
- Leetcode 剑指 Offer 03. 数组中重复的数字 (每日一题 20210614)
找出数组中重复的数字.在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次.请找出数组中任意一个重复 ...
- 【三种解法实现】剑指 Offer 03. 数组中重复的数字
立志用最少的代码做最高效的表达 题目链接-->传送门 找出数组中重复的数字. 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数 ...
- leetcode 剑指 Offer 03. 数组中重复的数字
找出数组中重复的数字. 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次.请找出数组中任意一个重 ...
- 剑指 Offer 03. 数组中重复的数字()
在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次.请找出数组中任意一个重复的数字. 解题思路 原 ...
- 【算法】剑指 Offer 03. 数组中重复的数字
1.概述 找出数组中重复的数字. 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次.请找出数组中 ...
- 剑指offer (03):数组中重复的数字 (C++ Python 实现)
1 题目一 找出数组中重复的数字 1.1 描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次.请找出数组中任意一 ...
最新文章
- 最大子序和的golang实现
- js 判断多个关键词_2020关键词优化,做好这三点效果立现!
- javaweb_JSP 中文字符处理程序
- linux文件解压zip文件,linux下解压zip文件报错
- eventbus多个订阅_番石榴的EventBus –简单的发布者/订阅者
- bzoj3993 [SDOI2015]星际战争 二分答案+网络流检验
- 99年毕业设计获优的程序-图书管理程序 续
- c语言五子棋人机对弈算法,使用canvas基于AI算法实现人机对战之五子棋
- MaxScale中间件部署数据库读写分离
- 使用Linux的tzselect功能,查看各个洲都有哪些国家(地区)
- MythXinWCF通用宿主绿色版V1.2发布,及服务启动相关说明
- Matlab简单描点绘图
- 在线教育:最常见的直播课程有哪些?
- LaTeX数学公式-详细教程
- 小工具-FTP文件传输(FlashFXP4.4.2 )
- BZOJ 1984: 月下“毛景树” [树链剖分 边权]
- 2020年最新微博相关数据API+一站式获取个人微博信息+套娃、批量式获取微博用户信息
- dbm与mysql区别_dbm数据库
- 音频音乐与计算机的交融-音频音乐技术
- 全民wa矿小程序源码
热门文章
- 启明去端分享| ESP32-S3如何实现tcp_client和tcp_server9-07
- 启明云端分享|乐鑫ESP32-WROOM-32E和ESP32-WROOM-32UE两款模组的区别
- c语言链表p-%3enext,课程设计报告.c语言程序设计.pdf
- Git 下载很慢问题解决方案
- 浪潮as5300技术方案_混闪存储AS5300G5
- session过期情况下ajax请求不会触发重新登录的问题
- [笔记]路由器与交换机的区别
- C#基础巩固之基础类型
- 【easyui】treegrid逐级加载源码
- IOS TextField设置大全