剑指Offer
如此生活二十年
这个作者很懒,什么都没留下…
展开
-
找出数组中重复的数字
给定一个长度为 nn 的整数数组 nums,数组中所有的数字都在 0∼n−10∼n−1 的范围内。 数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。 请找出数组中任意一个重复的数字。 注意:如果某些数字不在 0∼n−10∼n−1 的范围内,或数组中不包含重复数字,则返回 -1; 样例 给定 nums = [2, 3, 5, 4, 3, 2, 6, 7]。 ...原创 2019-10-06 20:57:12 · 252 阅读 · 0 评论 -
字符串中第一个只出现一次的字符
在字符串中找出第一个只出现一次的字符。 如输入"abaccdeff",则输出b。 如果字符串中不存在只出现一次的字符,返回#字符。 class Solution { public: char firstNotRepeatingChar(string s) { int a[53]={0}; for(int i=0;i<s.size();i++ ) ...原创 2019-10-11 18:38:34 · 70 阅读 · 0 评论 -
圆圈中最后剩下的数字
0, 1, …, n-1这n个数字(n>0)排成一个圆圈,从数字0开始每次从这个圆圈里删除第m个数字。 求出这个圆圈里剩下的最后一个数字。 class Solution { public: int lastRemaining(int n, int m){ int f[10000]; f[1]=0; for(int i=2;i<...原创 2019-10-11 13:25:13 · 65 阅读 · 0 评论 -
剪绳子
给你一根长度为 nn 绳子,请把绳子剪成 mm 段(mm、nn 都是整数,2≤n≤58 并且 m≥2)。 每段的绳子的长度记为k[0]、k[1]、……、k[m]。可能的最大乘积是多少? 例如当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到最大的乘积18。 思路: 设置一个数组dp[n+1],dp[ i ]存储绳子长度为i 时的最大乘积。依题意,绳子至少被剪一次,所以绳子...原创 2019-10-09 19:37:13 · 69 阅读 · 0 评论 -
机器人的运动范围
地上有一个 mm 行和 nn 列的方格,横纵坐标范围分别是 0∼m−10∼m−1 和 0∼n−10∼n−1。 一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格。 但是不能进入行坐标和列坐标的数位之和大于 kk 的格子。 请问该机器人能够达到多少个格子? 代码: class Solution { public:int ans=0; bool v[50][...原创 2019-10-09 19:23:47 · 54 阅读 · 0 评论 -
调整数组顺序使奇数位于偶数前面
输入一个整数数组,实现一个函数来调整该数组中数字的顺序。 使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分。 代码: class Solution { public: void reOrderArray(vector<int> &array) { int i=0;int j=array.size()-1; whi...原创 2019-10-08 21:51:37 · 51 阅读 · 0 评论 -
数值的整数次方
实现函数double Power(double base, int exponent),求base的 exponent次方。 不得使用库函数,同时不需要考虑大数问题。 注意: 不会出现底数和指数同为0的情况 思路:当指数是负数时,我们需要先取指数的绝对值,最后将乘积的倒数作为答案。 class Solution { public: double Power(double bas...原创 2019-10-08 21:41:57 · 57 阅读 · 0 评论 -
二进制中1的个数
输入一个32位整数,输出该数二进制表示中1的个数。 注意: 负数在计算机中用其绝对值的补码来表示。 思路:这里有个难点是如何处理负数。 在C++中如果我们右移一个负整数,系统会自动在最高位补1,这样会导致 nn 永远不为0,就死循环了。 解决办法是把 nn 强制转化成无符号整型,这样 nn 的二进制表示不会发生改变,但在右移时系统会自动在最高位补0。 代码: class Solutio...原创 2019-10-08 21:22:41 · 100 阅读 · 0 评论 -
旋转数组的最小数字
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个升序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 数组可能包含重复项。 注意:数组内所含元素非负,若数组大小为0,请返回-1. 样例: 输入:nums=[2,2,2,0,1] 输出:0 为了便于分析,我们先将数组中的数...原创 2019-10-07 15:53:46 · 72 阅读 · 0 评论 -
矩阵中的路径
请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。 路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。 如果一条路径经过了矩阵中的某一个格子,则之后不能再次进入这个格子。 注意: 输入的路径不为空; 所有出现的字符均为大写英文字母; 样例 matrix= [ ["A","B","C","E"], ["S","F...原创 2019-10-07 13:02:46 · 158 阅读 · 0 评论 -
二维数组中的查找
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。 请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 样例 输入数组: [ [1,2,8,9], [2,4,9,12], [4,7,10,13], [6,8,11,15] ] 如果输入查找数值为7,则返回true, 如果输入查找数值为5,则返回false...原创 2019-10-07 12:40:44 · 86 阅读 · 0 评论 -
替换空格
请实现一个函数,把字符串中的每个空格替换成"%20"。 你可以假定输入字符串的长度最大是1000。 注意输出字符串的长度可能大于1000。 样例 输入:"We are happy." 输出:"We%20are%20happy." 代码: class Solution { public: string replaceSpaces(string &str) { ...原创 2019-10-07 12:27:23 · 75 阅读 · 0 评论 -
不修改数组找出重复的数字
给定一个长度为 n+1n+1 的数组nums,数组中所有的数均在 1∼n1∼n 的范围内,其中 n≥1n≥1。 请找出数组中任意一个重复的数,但不能修改输入的数组。 样例 给定 nums = [2, 3, 5, 4, 3, 2, 6, 7]。 返回 2 或 3。 代码: class Solution { public: int duplicateInArray(vecto...原创 2019-10-06 20:57:09 · 125 阅读 · 0 评论 -
左旋转字符串
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。 请定义一个函数实现字符串左旋转操作的功能。 比如输入字符串"abcdefg"和数字2,该函数将返回左旋转2位得到的结果"cdefgab"。 注意: 数据保证n小于等于输入字符串的长度。 代码: class Solution { public: string leftRotateString(string str...原创 2019-10-11 18:49:30 · 61 阅读 · 0 评论