![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑指Offer
JunMain
这个作者很懒,什么都没留下…
展开
-
七周打卡剑指offer《调整数组顺序使奇数位于偶数前面》
调整数组顺序使奇数位于偶数前面题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序。使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分。样例输入:[1,2,3,4,5]输出: [1,3,5,2,4]题解双指针问题,用两个指针i,j指向两端j从后往前扫描遇到奇数停下,i从前向后扫描遇到偶数停下 交换顺序i == j 的时候停止代码class Solution {public: void reOrderArray(vector<int> &原创 2021-09-29 17:09:59 · 113 阅读 · 0 评论 -
七周打卡剑指offer《 删除链表中重复的节点》
删除链表中重复的节点题目描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留。样例样例1输入:1->2->3->3->4->4->5输出:1->2->5样例2输入:1->1->1->2->3输出:2->3题解同一个数组记录每个节点出现的次数,模拟的时候当大于1的就跳过有几个特殊情况需要考虑1.原来是空链表2.给的链表都是相同数字代码/** * Definitio原创 2021-09-28 16:06:46 · 86 阅读 · 0 评论 -
七周打卡剑指offer《二进制中1的个数》
题目描述输入一个 32 位整数,输出该数二进制表示中 1 的个数。注意:负数在计算机中用其绝对值的补码来表示。样例样例1输入:9输出:2解释:9的二进制表示是1001,一共有2个1。样例2输入:-2输出:31解释:-2在计算机里会被表示成11111111111111111111111111111110, 一共有31个1。题解lowbit(x) 是求出一个数二进制中最右边一个1的数 x & -x注意负数的补码 = 反码 + 1例如5 = (0101)2(原创 2021-09-28 15:58:54 · 125 阅读 · 0 评论 -
七周打卡剑指offer《数值的整数次方》
数值的整数次方题目描述实现函数double Power(double base, int exponent),求base的 exponent次方。不得使用库函数,同时不需要考虑大数问题。只要输出结果与答案的绝对误差不超过 10−2 即视为正确。注意:不会出现底数和指数同为0的情况当底数为0时,指数一定为正样例样例1输入:10 ,2输出:100样例2输入:10 ,-2 输出:0.01题解:正常来说就是一个模拟问题,但是指数是int范围直接O(n)O(n)O(n)循环一原创 2021-09-27 19:06:13 · 103 阅读 · 0 评论 -
七周打卡剑指offer《剪绳子》
剪绳子题目描述给你一根长度为 nnn 绳子,请把绳子剪成 mmm 段(m、n 都是整数,2≤n≤582≤n≤582≤n≤58 并且 m≥2m≥2m≥2)。每段的绳子的长度记为k[1]、k[2]、……、k[m]k[1]、k[2]、……、k[m]k[1]、k[2]、……、k[m]k[1]k[2]…k[m]k[1]k[2]…k[m]k[1]k[2]…k[m] 可能的最大乘积是多少?样例例如当绳子的长度是 8 时,我们把它剪成长度分别为 2、3、3 的三段,此时得到最大的乘积 18。输入:8输原创 2021-09-25 15:54:21 · 104 阅读 · 0 评论 -
七周打卡剑指offer《机器人的运动范围》
机器人的运动范围题目描述地上有一个 m 行和 n 列的方格,横纵坐标范围分别是 0∼m−1 和 0∼n−1。一个机器人从坐标 (0,0) 的格子开始移动,每一次只能向左,右,上,下四个方向移动一格。但是不能进入行坐标和列坐标的数位之和大于 k 的格子。请问该机器人能够达到多少个格子?样例1输入:k=7, m=4, n=5输出:20样例2输入:k=18, m=40, n=40输出:1484解释:当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。原创 2021-09-25 00:24:09 · 95 阅读 · 0 评论 -
七周打卡剑指offer《斐波那契数列》
斐波那契数列题目描述输入一个整数 n ,求斐波那契数列的第 n 项。假定从 0 开始,第 0 项为 0。(n≤39)样例输入整数 n=5 返回 5题解斐波那契数列:前两项为1, 从第三项之后,每一项的纸是前两项的和f(x)={1,x = 11,x = 2f(x−1)+f(x−2),x > 2f(x) = \begin{cases} 1, &\text{x = 1} \\ 1, &\text{x = 2}原创 2021-09-24 23:56:11 · 89 阅读 · 0 评论 -
七周打卡剑指offer《旋转数组中最小的数字》
旋转数组中最小的数字题目描述:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个升序的数组的一个旋转,输出旋转数组的最小元素。例如数组 {3,4,5,1,2} 为 {1,2,3,4,5} 的一个旋转,该数组的最小值为 1。数组可能包含重复项。注意:数组内所含元素非负,若数组大小为 0,请返回 −1。样例输入:nums = [2, 2, 2, 0, 1]输出:0题解:二分根据二分的本质我们发现除了最后没几个数字和nums[0]相同其他都满足二段性所以先把原创 2021-09-23 18:52:10 · 113 阅读 · 0 评论 -
七周打卡剑指offer《矩阵中的路径》
矩阵中的路径题目描述请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则之后不能再次进入这个格子。注意:输入的路径不为空;所有出现的字符均为大写英文字母;样例:matrix=[ ["A","B","C","E"], ["S","F","C","S"], ["A","D","E","E"]]str="BCCE" , re原创 2021-09-23 18:18:35 · 122 阅读 · 0 评论 -
七周剑指offer《从尾到头打印链表》
从尾到头打印链表输入一个链表的头结点,按照 从尾到头 的顺序返回节点的值。返回的结果用数组存储。样例输入:[2, 3, 5]返回:[5, 3, 2]代码:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Soluti原创 2021-09-22 12:55:13 · 85 阅读 · 0 评论 -
七周剑指offer《替换空格》
替换空格请实现一个函数,把字符串中的每个空格替换成"%20"。你可以假定输入字符串的长度最大是 1000。注意输出字符串的长度可能大于 1000。样例输入:"We are happy."输出:"We%20are%20happy."代码:class Solution {public: string replaceSpaces(string &str) { string ans; for (auto c : str){原创 2021-09-22 12:52:06 · 66 阅读 · 0 评论 -
七周打卡剑指offer《二维数组中的查找》
二维数组中的查找题目描述在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。样例输入数组:[ [1,2,8,9], [2,4,9,12], [4,7,10,13], [6,8,11,15]]如果输入查找数值为7,则返回true,如果输入查找数值为5,则返回false。暴力做法 O(n2n^2n2)思路:先扫描第一行找出比target小的最大数字记录原创 2021-09-21 13:48:26 · 118 阅读 · 0 评论 -
七周打卡剑指offer《不修改数组找出重复的数》
不修改数组找出重复的数字给定一个长度为 n+1 的数组nums,数组中所有的数均在 1∼n 的范围内,其中 n≥1。请找出数组中任意一个重复的数,但不能修改输入的数组。样例给定 nums = [2, 3, 5, 4, 3, 2, 6, 7]。返回 2 或 3。思考题:如果只能使用 O(1) 的额外空间,该怎么做呢?抽屉原理n个抽屉放n+1个苹果至少有一个抽屉里面放了两个以上的苹果根据题目一个有n个数字但是nums[]里面一共选了n+1个数字,必然有一个数字选中了两次,这个时候我们原创 2021-09-20 20:58:39 · 112 阅读 · 0 评论 -
七周打卡剑指Offer《找出数组中重复的数》
1.找出数组中重复的数字给定一个长度为 n 的整数数组 nums,数组中所有的数字都在 0∼n−1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。注意:如果某些数字不在 0∼n−1 的范围内,或数组中不包含重复数字,则返回 -1;样例给定 nums = [2, 3, 5, 4, 3, 2, 6, 7]。返回 2 或 3。时间复杂度O(N) 空间复杂度O(1)由于每个数如果合法都在0~n-1那么我们把每个数都放到它原创 2021-09-18 15:33:47 · 149 阅读 · 0 评论