剑指offer
双燕难凭远信
简介-省略
展开
-
《剑指offer》—— 构建乘积数组
《剑指offer》—— 构建乘积数组描述:给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B中的元素B[i]=A[0]A[1]…*A[i-1]A[i+1]…*A[n-1]。不能使用除法。(注意:规定B[0] = A[1] * A[2] * … * A[n-1],B[n-1] = A[0] * A[1] * … * A[n-2];)对于A长度为1的情况,B无意义,故而无法构建,因此该情况不会存在。示例1输入:[1,2,3,4,5]返回值:[120,60,40,30原创 2021-09-14 13:39:18 · 130 阅读 · 0 评论 -
《剑指offer》—— 扑克牌顺子
扑克牌顺子题目描述:LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张_)…他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子…LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K为13。上面的5张牌就可以变成“1,2,3,4,5”(大小王分别看作2和4),“So Lucky!”。LL决定去买体原创 2021-04-13 21:56:48 · 136 阅读 · 0 评论 -
《剑指offer》—— 链表中倒数第k个结点
链表中倒数第k个结点题目描述:输入一个链表,输出该链表中倒数第k个结点。如果该链表长度小于k,请返回空。示例1输入{1,2,3,4,5},1返回值{5}Code:/** * struct ListNode { * int val; * struct ListNode *next; * ListNode(int x) : val(x), next(nullptr) {} * }; */class Solution {public: /** * 代码中的类名原创 2021-04-13 21:35:14 · 123 阅读 · 0 评论 -
《剑指offer》—— 替换空格
《剑指offer》—— 替换空格题目描述:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。示例1输入“We Are Happy”返回值“We%20Are%20Happy”Code:class Solution {public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @pa原创 2021-04-13 21:08:16 · 164 阅读 · 0 评论 -
《剑指offer》——求1+2+3+...+n
求1+2+3+…+n题目描述求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。示例1输入5返回值15Code递归:class Solution {public: int Sum_Solution(int n) { if(n == 1) return 1; else return n+Sum_Solution(n-原创 2021-03-23 19:46:27 · 134 阅读 · 0 评论 -
《剑指offer》——和为S的两个数字
和为S的两个数字题目描述:输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。返回值描述:对应每个测试案例,输出两个数,小的先输出。示例1输入[1,2,4,7,11,15],15返回值[4,11]Code:class Solution {public: vector<int> FindNumbersWithSum(vector<int> array,int sum) {原创 2021-03-23 16:24:01 · 100 阅读 · 0 评论 -
《剑指offer》—— 调整数组顺序使奇数位于偶数前面并且不改变相对顺序
调整数组顺序使奇数位于偶数前面并且不改变相对顺序题目描述:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。示例1输入[1,2,3,4]返回值[1,3,2,4]Code:class Solution {public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @par原创 2021-03-23 16:13:09 · 256 阅读 · 0 评论 -
《剑指offer》 —— 数字在升序数组中出现的次数
题目链接: 数字在升序数组中出现的次数题目描述:统计一个数字在升序数组中出现的次数。class Solution {public: int GetNumberOfK(vector<int> data ,int k) { int len = data.size(); if(len <= 0 || k < data[0] || k > data[len-1]) return 0; int ans原创 2020-11-01 12:10:34 · 183 阅读 · 0 评论 -
《剑指offer》—— 两个链表的第一个公共结点
题目链接:两个链表的第一个公共结点题目描述输入两个链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)说明:本题目包含复杂数据结构ListNode,点此查看相关信息/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public:原创 2020-10-30 23:41:42 · 152 阅读 · 0 评论 -
《剑指offer》 —— 数组中1出现的次数
题目链接:数组中1出现的次数题目描述:求出113的整数中1出现的次数,并算出1001300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。class Solution {public: int NumberOf1Between1AndN_Solution(int n) {原创 2020-10-30 22:42:25 · 178 阅读 · 0 评论 -
《剑指offer》 ——将字符串转换为整数
题目链接:将字符串转换为整数题目描述:将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0class Solution {public: int StrToInt(string str) { //判空 if(str == "") return 0; bool flag = false; int len = str.length();原创 2020-10-30 22:22:01 · 163 阅读 · 0 评论 -
《剑指offer》—— 数组中出现次数超过一半的数字
题目链接:数组中出现次数超过一半的数字题目描述:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。class Solution {public: int MoreThanHalfNum_Solution(vector<int> numbers) { int len = numbers.size();原创 2020-10-30 22:02:55 · 213 阅读 · 0 评论 -
合并两个有序的数组
题目连接:合并两个有序的数组题目描述:给出两个有序的整数数组 和 ,请将数组 合并到数组 中,变成一个有序的数组注意:可以假设数组有足够的空间存放 数组的元素, 和 中初始的元素数目分别为m和n解法一:最简单解法,暴力求解(合并两数组+冒泡排序)100.00% 通过率 4ms 运行时间 504KB 占用内存`#include <cstring>class Solution {public: void merge(int A[], int m, int B[], in原创 2020-10-30 14:30:43 · 347 阅读 · 0 评论 -
《剑指offer》—— 删除链表中的重复节点
题目描述:在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5说明:本题目包含复杂数据结构ListNode,点此查看相关信息/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NUL原创 2020-10-18 21:03:23 · 193 阅读 · 0 评论 -
《剑指offer》 —— 调整数组顺序使得数组得奇数在偶数前
题目描述:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。class Solution {public: void reOrderArray(vector<int> &array) { int len = array.size(); if(len <= 0) {原创 2020-10-18 16:57:52 · 1800 阅读 · 4 评论 -
《剑指offer》—— 合并两个排序链表
题目描述:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。说明:本题目包含复杂数据结构ListNode,点此查看相关信息/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* Merge(ListNode* pHead1, Li原创 2020-10-16 20:08:35 · 183 阅读 · 0 评论 -
《剑指offer》 —— 反转链表
题目描述:输入一个链表,反转链表后,输出新链表的表头。说明:本题目包含复杂数据结构ListNode,点此查看相关信息/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* ReverseList(ListNode* pHead) { //空链表原创 2020-10-11 22:37:02 · 198 阅读 · 1 评论 -
《剑指offer》 —— 链表中环的入口节点
题目描述:给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。说明:本题目包含复杂数据结构ListNode,点此查看相关信息/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* EntryNodeOfLoop(L原创 2020-10-11 22:08:31 · 157 阅读 · 0 评论 -
《剑指offer》 ——链表中倒数第K个结点
题目描述:输入一个链表,输出该链表中倒数第k个结点。说明:本题目包含复杂数据结构ListNode,点此查看相关信息/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* FindKthToTail(ListNode* pListHead, unsigned int k)原创 2020-10-10 17:16:37 · 179 阅读 · 0 评论 -
《剑指offer》—— 二维数组中的查找
题目描述:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。class Solution {public: bool Find(int target, vector<vector<int> > array) { int row = (int)array.size(); int col = (int)array[0原创 2020-10-08 23:37:18 · 153 阅读 · 2 评论 -
《剑指offer》—— 剪绳子(动态规划+贪心算法)
题目描述:给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1,m<=n),每段绳子的长度记为k[1],…,k[m]。请问k[1]x…xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。动态规划法:class Solution {public: int cutRope(int number) { //动态规划法解决 //特殊情况原创 2020-09-21 17:04:41 · 250 阅读 · 0 评论 -
《剑指offer》—— 数值的整数次方
题目描述:给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。保证base和exponent不同时为02020-9-17——第一次class Solution {public: double Power(double base, int exponent) { double result = 0.0; if(abs(base-0.0) < 1e-5 && exponent =原创 2020-09-17 19:54:56 · 141 阅读 · 0 评论 -
《剑指offer》——二进制中1的个数
题目描述:输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。class Solution {public: int NumberOf1(int n) { int count = 0; while(n) { count++; n=(n-1) & n; } return count; }};...原创 2020-09-17 16:48:27 · 158 阅读 · 0 评论 -
《剑指offer》—— 从尾到头打印链表
题目描述:输入一个链表,按链表从尾到头的顺序返回一个ArrayList。/*** struct ListNode {* int val;* struct ListNode *next;* ListNode(int x) :* val(x), next(NULL) {* }* };*/class Solution {public: vector<int> printListFro原创 2020-09-17 15:03:00 · 122 阅读 · 0 评论 -
《剑指offer》——矩形覆盖
题目描述:我们可以用2 * 1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2 * 1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?比如n=3时,2*3的矩形块有3种覆盖方法:class Solution {public: int rectCover(int number) { int fib[100]={1,2}; if(number < 1) { return 0; }原创 2020-09-17 14:42:33 · 95 阅读 · 0 评论 -
《剑指offer》—— 矩阵中的路劲(回溯,dfs)
题目描述:请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。例如矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入该格子。class Solution {public: bool hasPath(char* ma原创 2020-09-16 16:53:10 · 2024 阅读 · 0 评论 -
《剑指offer》——斐波那契数列
题目描述:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1)。n<=39class Solution {public: int Fibonacci(int n) { int fib[40] = {0,1}; int i = 2; if(n < 0 || n >= 40) return 0; while(i &原创 2020-09-16 10:41:12 · 177 阅读 · 0 评论 -
《剑指offer》——旋转数组中的最小值
题目描述:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组[3,4,5,1,2]为[1,2,3,4,5]的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。class Solution {public: int minNumberInRotateArray(vector<int> rotateArray) { if(rotateArra原创 2020-09-15 21:03:50 · 116 阅读 · 0 评论 -
《剑指offer》——青蛙跳台阶/变态跳台阶
题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。class Solution {public: int jumpFloorII(int number) { int result[100] = {1,2}; if(number <= 2) { return result[number-1]; } else原创 2020-09-15 16:27:21 · 2382 阅读 · 0 评论 -
《剑指offer》——两个栈实现一个队列
题目描述:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。class Solution{public: void push(int node) { stack1.push(node); } void swap(stack<int>& stack1, stack<int>& stack2) { while(!stack1.empty())原创 2020-09-15 15:19:52 · 103 阅读 · 0 评论 -
《剑指offer》——替换空格
题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。class Solution {public: void replaceSpace(char *string,int length) { if(string == nullptr || length == 0) { return ; } int co原创 2020-09-15 11:22:20 · 98 阅读 · 0 评论 -
《剑指offer》——数组中重复的数字
题目:在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。class Solution {public: bool duplicate(int nums[], int len, int* ans) { if(nums == nullptr) {原创 2020-09-15 10:38:41 · 320 阅读 · 0 评论