当前位置:网站首页>剑指 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;
}
}
边栏推荐
- Convolutional Neural Network (CNN) for mnist handwritten digit recognition
- LeetCode 1894. Find the student number that needs to be supplemented with chalk
- 过大数组导致爆栈的解决方法记录(堆栈)
- LeetCode 1351. Counting Negative Numbers in Ordered Matrices (Simple)
- 常用模块封装-pymysql、pymongo(可优化)
- 多线程与多进程(概念详细讲解)
- 在Unity中让主摄像机发射一条射线,判断射线在游戏场景中所碰撞的游戏物体名字和标签名称(亲测有效)
- 【C语言】结构体变量学习笔记1
- Unity中暂停、继续播放、杀死、正放、倒放Dotween动画
- C陷阱与缺陷 个人阅读笔记
猜你喜欢
随机推荐
剑指 Offer(第 2 版)7/5 5-8
【图像识别】训练一个最最简单的AI使其识别Vtuber
ASP.Net利用代码点击相应按钮来关闭当前的页面(亲测有效)
STM32F407ZG 看门狗 IWDG & WWDG
每日刷题(day03)——leetcode 899. 有序队列
LruCache与DiskLruCache结合简单实现ImageLoader
为什么游戏需要热更新
STM32F407ZG PWM
除砷树脂吸附原理
Explain the principle of MySql index in detail
pytorch-05. Implementing linear regression with pytorch
C陷阱与缺陷 个人阅读笔记
Linux的文件IO与标准IO,以及IO缓存
Unity对象池实现
2021-04-15 jacoco代码覆盖率统计和白盒测试
STM32单片机OLED经典2048游戏单片机小游戏
Unity中采用二进制存档与读档
Flutter Package 插件开发
作为测试,常用的adb命令
PyTorch之模型定义