当前位置: 首页 > news >正文

从0开始刷剑指Offer

剑指Offer题解

剑指 Offer 11. 旋转数组的最小数字

思路: 二分O(logn)

class Solution {public int stockManagement(int[] stock) {int l = 0;int r = stock.length - 1;while(l < r && stock[0] == stock[r]) r --;if(stock[r] >= stock[l]) return stock[0];while(l < r) {int mid = l + r >> 1;if(stock[mid] < stock[0]) r = mid;else l = mid + 1;}return stock[l];}
}

剑指 Offer 12. 矩阵中的路径

思路: 回溯O(n23k)

class Solution {int[] dx = new int[] {-1, 0, 1, 0};int[] dy = new int[] {0, 1, 0, -1};public boolean wordPuzzle(char[][] grid, String target) {char[] words = target.toCharArray();for(int i = 0; i < grid.length; i ++) {for(int j = 0; j < grid[i].length; j ++) {if(dfs(grid, words, i, j, 0)) return true;}}return false;}boolean dfs(char[][] grid, char[] target, int i, int j, int k) {if(i >= grid.length || i < 0 || j >= grid[0].length || j < 0 || grid[i][j] != target[k]) {return false;}if(k == target.length - 1) return true;grid[i][j] = '.';for(int num = 0; num < 4; num ++) {int a = i + dx[num];int b = j + dy[num]; if(dfs(grid, target, a, b, k + 1)) return true;}grid[i][j] = target[k];return false;}
}

剑指 Offer 13. 机器人的运动范围

思路一: 宽搜O(nm)

class Solution {int[] dx = new int[]{-1, 0, 1, 0};int[] dy = new int[]{0, 1, 0, -1};public int wardrobeFinishing(int m, int n, int k) {if(m == 0 || n == 0) return 0;Queue<int[]> q = new LinkedList<>();boolean[][] visited = new boolean[m][n];q.add(new int[]{0, 0});int cnt = 0;while(!q.isEmpty()) {int[] t = q.poll();int x = t[0];int y = t[1];if(visited[x][y] || getSum(x, y) > k) continue;cnt ++;visited[x][y] = true;for(int i = 0; i < 4; i ++) {int a = x + dx[i];int b = y + dy[i];if(a >= 0 && a < m && b >= 0 && b < n) {q.add(new int[]{a, b});}}}return cnt;}int getSum(int x, int y) {int s = 0;while(x != 0) {s += x % 10;x = x / 10;}while(y != 0) {s += y % 10;y = y / 10;}return s;}
}

思路二: 深搜O(nm)

class Solution {int m, n, cnt;boolean[][] visited;public int wardrobeFinishing(int m, int n, int cnt) {this.m = m;this.n = n;this.cnt = cnt;this.visited = new boolean[m][n];return dfs(0, 0, 0, 0);}public int dfs(int i, int j, int si, int sj) {if(i >= m || j >= n || cnt < si + sj || visited[i][j]) return 0;visited[i][j] =true;return 1 + dfs(i + 1, j, (i + 1) % 10 != 0 ? si + 1 : si - 8, sj) + dfs(i, j + 1, si, (j + 1) % 10 != 0 ? sj + 1 : sj - 8);}
}

剑指 Offer 14- I. 剪绳子

思路: 贪心O(n)

class Solution {public int cuttingBamboo(int n) {if(n <= 3) return n - 1;int res = 1;if(n % 3 == 1) {res = 4;n -= 4;}else if(n % 3 == 2) {res = 2;n -= 2;}while(n > 0) {res = (res * 3) % 1000000007;n -= 3;}return res;}
}

剑指 Offer 14- II. 剪绳子 II

思路: 贪心O(n) 同上

class Solution {public int cuttingBamboo(int n) {if(n < 4) return n - 1;long res = 1;if(n % 3 == 1) {res = 4;n -= 4;}else if(n % 3 == 2) {res = 2;n -= 2;}while(n > 0) {res = (res * 3) % 1000000007; //循环求余n -= 3;}return (int)res;}
}

剑指 Offer 15. 二进制中1的个数

思路一: 逐位判断O(logn)

public class Solution {// you need to treat n as an unsigned valuepublic int hammingWeight(int n) {int res = 0;while(n != 0) {res += n & 1;n >>>= 1; //无符号右移}return res;}
}

思路二: 末位置0法O(logn)

public class Solution {public int hammingWeight(int n) {int res = 0;while(n != 0) {res++;n &= n - 1;}return res;}
}

思路三: 末位移除法O(logn)

public class Solution {// you need to treat n as an unsigned valuepublic int hammingWeight(int n) {int res = 0;while(n != 0) {n -= n & -n;res ++;}return res;}
}

剑指 Offer 16. 数值的整数次方

思路一:暴力O(n) 超出时间限制

class Solution {public double myPow(double x, int n) {if(n == 0) return 1.0;long N = n;return N >= 0 ? Mul(x, N) * 1.0 : 1.0 / Mul(x, -N);}public double Mul(double x, long b) {double temp = x;while(b -- > 1) {x *= temp;}return x;}
}

思路二:快速幂O(logn)

class Solution {public double myPow(double x, int n) {long N = n;return N >= 0 ? quickMul(x, N) * 1.0 : 1.0 / quickMul(x, -N);}public double quickMul(double x, long b) {double res = 1;while (b > 0) {if((b & 1) > 0) {res *= x;} b >>= 1;x *= x;}return res;}
}

剑指 Offer 17. 打印从1到最大的n位数

思路一:模拟O(n)

class Solution {public int[] countNumbers(int cnt) {int end = (int)Math.pow(10, cnt) - 1;int[] res = new int[end];for(int i = 0; i < end; i ++) {res[i] = i + 1;}return res;}
}

思路二:递归全排列O(10cnt)

class Solution {int[] res;int nine = 0; int count = 0; int start; int cnt;char[] num, loop = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};public int[] countNumbers(int cnt) {this.cnt = cnt;res = new int[(int)Math.pow(10, cnt) - 1];num = new char[cnt];start = cnt - 1;dfs(0);return res;}void dfs(int x) {// if (x == cnt) { //x是指的是num数组的位数String s = String.valueOf(num).substring(start);if(!s.equals("0")) res[count ++] = Integer.parseInt(s);if(cnt - start == nine) start --;//刚开始,cnt - start = 1, 当个位等于9时,nine = 1, start --;return;//因为这一步返回了,所以dfs继续下去,nine --;}for(char i : loop) {if(i == '9') nine ++;num[x] = i;dfs(x + 1);}nine --;}
}

剑指 Offer 18. 删除链表的节点

思路: (链表, 遍历) O(n)

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode(int x) { val = x; }* }*/
class Solution {public ListNode deleteNode(ListNode head, int val) {ListNode dummy = head;if(dummy.val == val) dummy = dummy.next;while (head != null && head.next != null) {if(head.next.val == val) {head.next = head.next.next;}head = head.next;} return dummy;}
}

剑指 Offer 19. 正则表达式匹配

思路: 动态规划O(nm)

class Solution {public boolean articleMatch(String s, String p) {int m = s.length() + 1, n = p.length() + 1;boolean[][] dp = new boolean[m][n];dp[0][0] = true;for(int j = 2; j < n; j += 2)dp[0][j] = dp[0][j - 2] && p.charAt(j - 1) == '*';//第一行初始化为0,因为s初始化是0for(int i = 1; i < m; i++) {for(int j = 1; j < n; j++) {dp[i][j] = p.charAt(j - 1) == '*' ?dp[i][j - 2] || dp[i - 1][j] && (s.charAt(i - 1) == p.charAt(j - 2) || p.charAt(j - 2) == '.') :dp[i - 1][j - 1] && (p.charAt(j - 1) == '.' || s.charAt(i - 1) == p.charAt(j - 1));}}return dp[m - 1][n - 1];}
}

剑指 Offer 20. 表示数值的字符串

**思路: (模拟,字符串处理)O(n) **

class Solution {public boolean validNumber(String s) {if(s.length() <= 0 || s == null ) {return false;}char[] res = s.trim().toCharArray();int len = res.length;boolean isNumber = false;boolean isE = false;boolean isDot = false;for(int i = 0; i < len; i ++ ){if(res[i] >= '0' && res[i] <= '9') {isNumber = true;}else  if(res[i] == '.') {if(isDot == true || isE == true) {return false;}isDot = true;}else if(res[i] == 'e' || res[i] == 'E') {if(isE == true || !isNumber ) {return false;}isE = true;isNumber = false;}else  if(res[i] == '-' || res[i] == '+') {if(i!=0 && res[i-1] != 'e' && res[i-1] != 'E'){return false;}}else  return false;}return isNumber;}
}

相关文章:

从0开始刷剑指Offer

剑指Offer题解 剑指 Offer 11. 旋转数组的最小数字 思路: 二分O(logn) class Solution {public int stockManagement(int[] stock) {int l 0;int r stock.length - 1;while(l < r && stock[0] stock[r]) r --;if(stock[r] > stock[l]) return stock[0];whi…...

使用Java语言中的算法输出杨辉三角形

一、算法思想 创建一个名为YanghuiTest的类,然后创建二维数组&#xff0c;然后遍历二维数组的第一层&#xff0c;然后初始化第二层数组的大小&#xff0c;然后遍历第二层数组&#xff0c;然后将两侧的数组元素赋为1&#xff0c;然后其它数值通过公式计算&#xff0c;最后可以输…...

人工智能_机器学习071_SVM支持向量机_人脸识别算法_LFW人脸数据加载_与理解---人工智能工作笔记0111

然后我们继续来看 这里有个lfw_home可以看到这个数据是,包含了人脸数据 然后我们继续看,在我们的顶你用户目录下,如果安装了,sklearn就会有这样一个目录, scikit_learn_data目录,这个里面可以看到 可以看到这个文件夹中有个 lfw_home文件夹是对.zip文件夹的解压,这个下载以后…...

Java 8中流Stream API详解

先给个示例&#xff0c;展示Java 8流API的优势 假设我们有以下任务&#xff1a; 给定一个字符串列表&#xff0c;我们需要执行以下操作&#xff1a; 筛选出所有以"A"开头的字符串。 将这些字符串转换为大写。 对这些字符串按照长度进行排序。 最后&#xff0c;将…...

通过 xlsx 解析上传excel的数据

一、前言 在前端开发中&#xff0c;特别是在后台管理系统中&#xff0c;导入数据&#xff08;上传excel&#xff09;到后端是是否常见的功能&#xff1b;而一般的实现方式都是通过接口将excel上传到后端&#xff0c;再有后端进行数据解析并做后续操作。 今天&#xff0c;来记录…...

Flink系列之:JDBC SQL 连接器

Flink系列之&#xff1a;JDBC SQL 连接器 一、JDBC SQL 连接器二、依赖三、创建 JDBC 表四、连接器参数五、键处理六、分区扫描七、Lookup Cache八、幂等写入九、JDBC Catalog十、JDBC Catalog 的使用十一、JDBC Catalog for PostgreSQL十二、JDBC Catalog for MySQL十三、数据…...

OpenCV与YOLO学习与研究指南

引言 OpenCV是一个开源的计算机视觉和机器学习软件库&#xff0c;而YOLO&#xff08;You Only Look Once&#xff09;是一个流行的实时对象检测系统。对于大学生和初学者而言&#xff0c;掌握这两项技术将大大提升他们在图像处理和机器视觉领域的能力。 基础知识储备 在深入…...

hive中map相关函数总结

目录 hive官方函数解释示例实战 hive官方函数解释 hive官网函数大全地址&#xff1a; hive官网函数大全地址 Return TypeNameDescriptionmapmap(key1, value1, key2, value2, …)Creates a map with the given key/value pairs.arraymap_values(Map<K.V>)Returns an un…...

HttpServletRequestWrapper、HttpServletResponseWrapper结合 过滤器 实现接口的加解密、国际化

目录 一、HttpServletRequestWrapper代码 二、HttpServletRequestWrapper代码 三、加解密过滤器代码 四、国际化过滤器代码 一、HttpServletRequestWrapper代码 package com.vteam.uap.security.httpWrapper;import jakarta.servlet.ReadListener; import jakarta.servlet.…...

最大通关数

洛洛和晶晶计划一起挑战峡谷深渊&#xff0c;峡谷左右有不同数量的关卡&#xff0c;每个关卡需要不同的紫水晶通关&#xff0c;用给定的紫水晶依次通过最多的关卡。 (笔记模板由python脚本于2023年12月23日 12:16:50创建&#xff0c;本篇笔记适合熟悉贪心算法的coder翻阅) 【学…...

MySQL中EXPLAIN关键字解释

什么是MySQL的索引 索引是帮助MySQL高效获取数据的数据结构 MySQL再存储数据之外&#xff0c;数据库系统中还维护者满足特定查找算法的数据结构&#xff0c;这些数据结构以某种引用表中的数据&#xff0c;这样我们就可以通过数据结构上实现的高级查找算法来快速…...

初始JavaScript详解【精选】

Hi i,m JinXiang ⭐ 前言 ⭐ 本篇文章主要介绍初始JavaScript以及部分理论知识 &#x1f349;欢迎点赞 &#x1f44d; 收藏 ⭐留言评论 &#x1f4dd;私信必回哟&#x1f601; &#x1f349;博主收将持续更新学习记录获&#xff0c;友友们有任何问题可以在评论区留言 目录 ⭐…...

计数排序,基数排序及排序总结

稳定性&#xff1a;当要排序的数组有相同数据时&#xff0c;排序后相同数据的相对位置不变&#xff0c;则称该排序算法稳定&#xff0c;否则即为不稳定. 在这里我在说说计数排序吧&#xff0c;计数排序就是将给定数组中的数进行计数&#xff0c;在从小到大依次输出即可。简单过…...

【LeetCode】459. 重复的子字符串(KMP2.0)

今日学习的文章链接和视频链接 leetcode题目地址&#xff1a;459. 重复的子字符串 代码随想录题解地址&#xff1a;代码随想录 题目简介 给定一个非空的字符串 s &#xff0c;检查是否可以通过由它的一个子串重复多次构成。 看到题目的第一想法(可以贴代码&#xff09; 1.…...

CSS(五) -- 动效实现(立体盒子旋转-四方体+正六边)

一. 四面立体旋转 正方形旋转 小程序中 wxss中 <!-- 背景 --><view class"dragon"><!--旋转物体位置--><view class"dragon-position"><!--旋转 加透视 有立体的感觉--><view class"d-parent"><view …...

Win10使用OpenSSL生成证书的详细步骤(NodeJS Https服务器源码)

远程开启硬件权限&#xff0c;会用到SSL证书。 以下是Win10系统下用OpenSSL生成测试用证书的步骤。 Step 1. 下载OpenSSL,一般选择64位的MSI Win32/Win64 OpenSSL Installer for Windows - Shining Light Productions 一路点下来&#xff0c;如果后续请你捐款&#xff…...

sql_lab之sqli中的堆叠型注入(less-38)

堆叠注入&#xff08;less-38&#xff09; 1.判断注入类型 http://127.0.0.3/less-38/?id1 and 12 -- s 没有回显 http://127.0.0.3/less-38/?id1 and 11 -- s 有回显 则说明是单字节’注入 2.查询字段数 http://127.0.0.3/less-38/?id1 order by 4 -- s 报错 http:/…...

第5章-第3节-Java中对象的封装性以及局部变量、this、static

1、局部变量 【问题1】&#xff1a;什么是局部变量&#xff1f; 答&#xff1a;定义在局部位置的变量就是局部变量。 【问题2】&#xff1a;什么是局部位置&#xff1f; 答&#xff1a;方法的形参位置、方法体的内部。 【位置关系图】&#xff1a; class Xxx { //成员位…...

IP应用场景的规划

IP地址作为互联网通信的基石&#xff0c;在现代社会中扮演着至关重要的角色。本文将深入探讨IP地址在不同应用场景中的规划与拓展&#xff0c;探讨其在网络通信、安全、商业、医疗和智能城市等领域的关键作用与未来发展趋势。 IP地址的基本原理 IP地址是分配给网络上设备的数…...

27 redis 的 sentinel 集群

前言 redis 的哨兵的相关业务功能的实现 哨兵的主要作用是 检测 redis 主从集群中的 master 是否挂掉, 单个哨兵节点识别 master 下线为主管下线, 超过 quorum 个 哨兵节点 认为 master 挂掉, 识别为 客观下线 然后做 failover 的相关处理, 重新选举 master 节点 我们这里…...

天津专业的阀门厂排名

在天津&#xff0c;阀门行业发展态势良好&#xff0c;众多阀门厂各有特色与优势。中国通用机械工业协会最新发布的《2026年阀门行业高质量发展白皮书》显示&#xff0c;天津的阀门产业在技术创新、产品质量和市场份额等方面都有不错的表现。下面为大家介绍几家天津比较知名的阀…...

ssm+java2026年毕设私教预约系统【源码+论文】

本系统&#xff08;程序源码&#xff09;带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、选题背景关于会议管理问题的研究&#xff0c;现有研究主要以传统纸质登记和简单的OA系统为主&#xff0c;专门针对智能化、全流程会议预…...

量子行走:从理论到Python实现——6. 量子机器学习与前沿应用

量子机器学习探索了量子计算与人工智能的交叉领域&#xff0c;通过利用量子叠加与纠缠特性处理经典难以应对的高维数据模式。Berkeley CS269Q课程与PennyLane教程系统阐述了从量子特征映射到实际化学模拟的完整技术栈&#xff0c;本章将围绕特征空间扩展、优化求解与信息安全三…...

遇到“用户对AIAgent进行提示词注入”怎么办?

文章目录先理解什么是“提示词注入”图片里的防护方法&#xff08;两层&#xff09;第一层&#xff1a;System Prompt 先贴“封条”第二层&#xff1a;输出端再加“安检门”总结先理解什么是“提示词注入” 你可以把 Agent&#xff08;智能助手&#xff09; 想象成一个 严格遵…...

【算法对抗】打穿查重黑盒!论文降AI太难?8个实测有效策略与高性价比工具

上周匆匆写完论文初稿交给导师&#xff0c;结果被一眼识破&#xff0c;当场打回。还被导师认为不认真不负责态度不端正&#xff01; 为了搞定这件事&#xff0c;我测评了市面上大部分的主流工具、试了无数方法&#xff0c;终于把AI率降到6%。 我们要先端正态度&#xff1a;论文…...

如何快速掌握Windows文件夹色彩管理:Folcolor免费工具终极指南

如何快速掌握Windows文件夹色彩管理&#xff1a;Folcolor免费工具终极指南 【免费下载链接】Folcolor Windows explorer folder coloring utility 项目地址: https://gitcode.com/gh_mirrors/fo/Folcolor 你是否曾在密密麻麻的黄色文件夹中迷失方向&#xff1f;每天花费…...

MacOS开发环境配置:OpenClaw+GLM-4.7-Flash联调指南

MacOS开发环境配置&#xff1a;OpenClawGLM-4.7-Flash联调指南 1. 为什么选择这个组合&#xff1f; 去年我在做一个自动化文档处理项目时&#xff0c;发现市面上的AI工具要么隐私性不足&#xff0c;要么灵活性太差。直到偶然接触到OpenClaw这个开源框架&#xff0c;才找到了理…...

LangChainJS性能优化:大规模AI应用的高效处理指南

LangChainJS性能优化&#xff1a;大规模AI应用的高效处理指南 【免费下载链接】langchainjs 项目地址: https://gitcode.com/GitHub_Trending/la/langchainjs LangChainJS是一个强大的JavaScript/TypeScript框架&#xff0c;专门用于构建基于大语言模型&#xff08;LLM…...

2026 年直播电商如何进化?内容创作与管理的新模式是什么?

核心要点 问题&#xff1a; 为什么很多直播电商团队在 2025 年后明显感到"内容越来越多&#xff0c;但效果越来越不稳定"&#xff1f; 答案&#xff1a; 进入 2026 年&#xff0c;直播电商从"单场爆发"转向"内容体系竞争"。真正拉开差距的&#…...

PT-Plugin-Plus:PT站点下载助手安装与使用指南

PT-Plugin-Plus&#xff1a;PT站点下载助手安装与使用指南 【免费下载链接】PT-Plugin-Plus PT 助手 Plus&#xff0c;为 Microsoft Edge、Google Chrome、Firefox 浏览器插件&#xff08;Web Extensions&#xff09;&#xff0c;主要用于辅助下载 PT 站的种子。 项目地址: h…...