![](https://img-blog.csdnimg.cn/20190918140213434.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
剑指offer题解
文章平均质量分 53
本专栏发表的题解是本人做过的力扣题,将自己做后的代码及思路作以总结,并发表出来供大家参考。
仟各
较劲
展开
-
编写程序求过点最多的直线所对应的斜率和截距
map中以斜率和截距的键值对作为键,点出现的次数为值。通过嵌套循环依次求出两点的截距和斜率,统计其出现的次数存放在这个map中。然后遍历map寻找值最大的那个键,将这个值和它的键输出。首先第一行给你一个数字n,表示一共有n个点,第二行之后依次是点的坐标。请你输出过这些点最多的那条直线的斜率和截距。转载 2022-08-19 21:20:48 · 499 阅读 · 0 评论 -
剑指offer 49.丑数
剑指offer 49.丑数题目描述:考察点:解题思路:1、状态定义:设dp[i]表示第i+1个丑数2、转移方程:dp[i]=min(dp[a]*2,dp[b]*3,dp[c]*5)3、初始状态4、dp[n-1];//表示返回第n个丑数完整代码(C++):题目描述:我们把只包含质因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。考察点:数学推导能力,动态规划思想解题思路:刚读完题目我觉得很简单,哈哈,大概思路如下,但是换了一个测试案例后不通过,我才原创 2021-12-08 13:16:37 · 121 阅读 · 0 评论 -
剑指offer 48. 最长不含重复字符的子字符串
题目描述:请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。完整代码(C++):①滑动窗口://滑动窗口class Solution {public: int lengthOfLongestSubstring(string s) { int left=0; int right=0; int res=0; set<char>sliding_window; wh原创 2021-12-06 17:37:23 · 415 阅读 · 0 评论 -
剑指 offer 47.礼物的最大价值
在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?原创 2021-12-03 11:32:19 · 98 阅读 · 0 评论 -
剑指 offer 46.把数字翻译成字符
题目:给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。原创 2021-11-29 20:26:22 · 113 阅读 · 0 评论 -
剑指 offer 45.把数组排成最小的数
题目描述:输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。说明:输出结果可能非常大,所以你需要返回一个字符串而不是整数拼接起来的数字可能会有前导 0,最后结果不需要去掉前导 0考察点:①泛型算法sort的使用(案例讲解见我的c/c++专栏——《泛型算法以及函数对象》这篇文章)②对于字符串的运用—>string③to_string()解题思路:①首先将数组中的每一个元素通过to_string转化为字符类型,存进string类型的数组中原创 2021-11-27 11:56:16 · 122 阅读 · 0 评论 -
剑指offer 42.连续子数组的最大和
题目描述:输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。考察点:本题的解题思路主要有两种:①动态规划②分治策略(分治策略我暂时还没太搞明白,所以下面的分析中没有)因此考察点显而易见解题思路:动态规划:贪心算法:完整代码(C++):动态规划:class Solution {public: int maxSubArray(vector<int>& nums) {//方法一:动态规划原创 2021-11-23 17:52:53 · 79 阅读 · 0 评论 -
剑指offer 52.两个链表的第一个公共结点
题目描述:输入两个链表,找出它们的第一个公共节点。考察点:本题主要考察在链表题中,对哈希集合 unordered_set的使用,或者双指针的灵活运用。解题思路:这个链表题主要有两种解题思路:1、使用哈希集合使用哈希集合来存储遍历到的第一次出现的结点,可以先遍历A链表,将A链表中所有的结点都存放到哈希集合中然后再遍历B链表,如果出现当前结点已经在哈希集合中,那么这个点就是第一个交点,返回这个结点如果将B链表都遍历完还没有发现有重复结点在哈希集合中,就返回NULL。2、使用双指针所谓的原创 2021-11-21 23:40:28 · 239 阅读 · 0 评论 -
剑指offer 57.和为s的两个数字
题目描述:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。考察点:要解决这个题,核心是要有双指针的思想。解题思路:通过循环查找,找到第一个比target大的数字,这个数字之前的数组元素为目标范围(这一步目的是为了缩小查找范围)在目标范围内展开循环,查找与target相等的两数之和然后让nums[left]和nums[right]相加,如果比target大,right–,如果比target小,left++,相等则退原创 2021-11-18 13:39:42 · 296 阅读 · 0 评论 -
剑指Offer 44.数字序列中某一位的数字
题目描述:数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4,等等。请写一个函数,求任意第n位对应的数字。问题点:当看到题目的时候,我觉得这道题的难点在于数学的找规律,当找到了相应的规律,那么代码编写起来并不难。解题思路:<1>要找的数所属的那个数字是几位数?例如:n=11:11-9=2<180 ->在10-180范围内(表示的信息:两位数,从10开始的第原创 2021-11-16 17:15:14 · 278 阅读 · 0 评论