当前位置:网站首页>剑指 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;
}
}
边栏推荐
- LeetCode refers to offer 10-I. Fibonacci sequence (simple)
- 二维卷积定理的验证(下,cv2.filter2D())
- 浅谈《帧同步网络游戏》之“框架”实现思路
- 通过adb devices命令在控制台显示企业级PicoNeo3设备号
- 在Unity中让主摄像机发射一条射线,判断射线在游戏场景中所碰撞的游戏物体名字和标签名称(亲测有效)
- VTK 初步 (1) ----- 可视化管线
- I don't like my code
- LeetCode 938. Range Sum of Binary Search Trees (Simple)
- 二次元卡通渲染之描边
- STM32F407ZG TIM通用定时器
猜你喜欢

51单片机智能远程遥控温控PWM电风扇系统红外遥控温度速度定时关机

STM32单片机OLED经典2048游戏单片机小游戏

开源游戏服务器框架NoahGameFrame(NF)服务器端环境搭建(二)

Common class String overview

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

Tensorflow 2.0 使用流程详解

ASP.Net利用代码点击相应按钮来关闭当前的页面(亲测有效)

STM32单片机手机APP蓝牙高亮RGB彩灯控制板任意颜色亮度调光

51单片机营养液自动配置搅拌系统TDS浓度采集自动加水加营养液

以STM32F103C6T6为例通过配置CubeMX实现EXIT外部中断
随机推荐
STM32F407ZG GPIO输出相关实验
STM32单片机LORA无线远程火灾报警监控系统DS18B20MQ2火焰检测
剑指 Offer(第 2 版)7/7 14-17
解决错误 Could not find method leftShift() for arguments
LeetCode 94. Inorder Traversal of Binary Trees (Simple)
(Flutter报错)Cannot run with sound null safety, because the following dependencies
AR Foundation Editor Remote插件使用方法
51单片机室内环境甲醛PM2.5光照温度湿度检测及窗帘加湿消毒控制系统
屏幕后期处理之:Sobel算子实现边缘检测
每日刷题(day02)——leetcode 622. 设计循环队列
通过adb devices命令在控制台显示企业级PicoNeo3设备号
基于MNIST数据集的简单FC复现
常用模块封装-csv文件操作封装
C#对MySQL数据库进行增删改查操作(该操作还有防止MySQL注入功能)
STM32单片机RGB红蓝调光植物补光系统红光蓝光PWM调色调节亮度
Flutter Package 插件开发
PyTorch之训练技巧
Pytorch配置与实战--Tips
pytorch-06. Logistic regression
系统架构和问题定位