当前位置:网站首页>剑指 Offer(第 2 版)7/4 1-4
剑指 Offer(第 2 版)7/4 1-4
2022-08-10 05:36:00 【吉良吉影__.】
1.剑指 Offer 03. 数组中重复的数字 简单
解法一:hash
class Solution {
public int findRepeatNumber(int[] nums) {
Set<Integer> set = new HashSet<>();
for (int x:nums) {
if (set.contains(x))return x;
set.add(x);
}
return -1;
}
}
解法二:排序
此解法不适用,只有基数排序没有超时
2.剑指 Offer 04. 二维数组中的查找 中等
方法一:对数组中的每一维进行二分查找
时间复杂度O(NlogN)
class Solution {
public boolean findNumberIn2DArray(int[][] matrix, int target) {
for (int i = 0; i < matrix.length; i++) {
if (search(matrix[i],target))return true;
}
return false;
}
public boolean search(int[] arr,int tar){
int l = 0;
int r = arr.length - 1;
while (l <= r){
int mid = (l + r) / 2;
if (arr[mid] > tar){
r = mid - 1;
}else if (arr[mid] < tar){
l = mid + 1;
}else {
return true;
}
}
return false;
}
}
方法二:线性查找
根据此题二维数组的特性
class Solution {
public boolean findNumberIn2DArray(int[][] matrix, int target) {
int n = matrix.length;
if (n == 0)return false;
int m = matrix[0].length;
if (m == 0)return false;
int hor = 0;
int ver = m - 1;
while (hor < n && ver >= 0){
int num = matrix[hor][ver];
if (num == target){
return true;
}if (num < target){
//num < target 则肯定可以在下方查找
hor++;
}if (num > target){
//num > target 则在左侧查找
ver--;
}
}
return false;
}
}
3.剑指 Offer 05. 替换空格 简单
class Solution {
public String replaceSpace(String s) {
StringBuilder res = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == ' '){
//是空格就替换
res.append("%20");
}else {
res.append(s.charAt(i));
}
}
return res.toString();
}
}
4.剑指 Offer 07. 重建二叉树 中等
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */
class Solution {
public TreeNode buildTree(int[] preorder, int[] inorder) {
return build(preorder,0,preorder.length - 1,inorder,0,inorder.length - 1);
}
public TreeNode build(int[] pre,int l,int r,int[] ino,int l2,int r2){
if (l > r)return null;
TreeNode root = new TreeNode(pre[l]);
if (l == r)return root;
int rootIdx = 0;//找到根节点在中序数组中的位置
for (int i = l2; i <= r2; i++) {
if (pre[l] == ino[i])
rootIdx = i;
}
root.left = build(pre,l + 1,l + (rootIdx - l2),
ino,l2,rootIdx - 1);
root.right = build(pre,l + (rootIdx - l2) + 1,r,
ino,rootIdx + 1,r2);
return root;
}
}
边栏推荐
- pytorch-10. Convolutional Neural Networks
- STM32F407ZG 串口通信+固定帧头帧尾传输数据帧
- 碳酸锂、碳酸氢锂溶液除钙镁离子工艺原理
- Convolutional Neural Network (CNN) for mnist handwritten digit recognition
- 浅谈《帧同步网络游戏》之“框架”实现思路
- ASP.NET连接SQL Server的步骤
- 21天学习挑战赛--图像物体的边界
- 二维卷积定理的验证(上)
- 酸回收工艺原理
- The way for programmers to make money from a sideline business and increase their monthly income by 20K
猜你喜欢

AR Foundation Editor Remote插件使用方法

51单片机BH1750智能补光灯台灯光强光照恒流源LED控制系统

Machine Learning - Clustering - Shopping Mall Customer Clustering

51单片机教室人数进出统计检测数码管显示装置红外传感器

.Net Core imports tens of millions of data to Mysql

8个问题轻松掌握Unity前向渲染

接口自动化2.0

每日刷题(day03)——leetcode 899. 有序队列

Deep learning TensorFlow entry environment configuration

每日刷题(day01)——leetcode 53. 最大子数组和
随机推荐
酸回收工艺原理
ASP.NET连接SQL Server的步骤
开源游戏服务器框架NoahGameFrame(NF)服务器端环境搭建(二)
mysql分组排序并取各分组前几个数据
51单片机智能蓝牙APP加油站火灾预警安防防控报警监控系统MQ2DHT11
【烘焙】肉松蛋糕卷
2022李宏毅机器学习hw1--COVID-19 Cases Prediction
LeetCode 292.Nim 游戏(简单)
【简易笔记】PyTorch官方教程简易笔记 EP1
Explain the principle of MySql index in detail
LeetCode 100. The same tree (simple)
Pytorch配置与实战--Tips
C#对MySQL数据库进行增删改查操作(该操作还有防止MySQL注入功能)
pytorch-06.逻辑斯蒂回归
Tkinter 模块学习
2021-04-15 jacoco代码覆盖率统计和白盒测试
Exploratory Data Analysis EDA
详解样条曲线(上)(包含贝塞尔曲线)
开源游戏服务器框架NoahGameFrame(NF)简介(一)
多线程与多进程(概念详细讲解)