转载请注明出处:http://blog.csdn.net/ns_code/article/details/25002199 剑指offer上的第四道题目,在九度OJ上測试通过,但还是有些问题.由于是用C语言实现的,因此,要提前开辟一个比較大的空间来存储输入的字符串.而假设在线測试系统的測试用例中字符串的长度大于该最大值的话.会报RE,可是九度OJ的測试用例没有大于我所设定的字符串的最大值.当然,这道题目用C++中的string类或java中的String类实现会更好,不须要操心输入字符串的长度.…
#include <stdio.h> void ReplaceBlank(char string[],int length){ if(string == NULL || length == 0){ return; } int originalLength = 0;// int blankCount = 0; while(string[originalLength] != '\0'){ if(string[originalLength] == ' '){ ++blankCount; } ++or…
#include <iostream> #include <string> using namespace std; char *ReplaceSpace(char *str,int MaxLen) { int SpaceNum = 0; int srcIdx = 0; int srcLen = 0; int dstIdx = 0; int dstLen = 0; char *strTmp = str; if(NULL == str) { return NULL; } while(…
题目描述 找出字符串中第一个只出现一次的字符 如果无此字符 请输出'.' 输入描述: 输入一串字符,由小写字母组成 输出描述: 输出一个字符 输入例子: asdfasdfo 输出例子: o 思路:数组s记录出现的字母顺序.time数组记录出现的次数,每个char对应一个int型,,,所以,字母a出现的次数可以直接用time['a']表示. AC代码: #include "iostream" #include "string.h" #define MAX 201 us…
题目描述 请实现一个函数用来找出字符流中第一个只出现一次的字符.例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g".当从该字符流中读出前六个字符"google"时,第一个只出现一次的字符是"l". 输出描述: 如果当前字符流没有存在出现一次的字符,返回#字符. class Solution { private: vector<char> vec; map<char, int>…
第一题344.反转字符串 编写一个函数,其作用是将输入的字符串反转过来.输入字符串以字符数组 s 的形式给出. 不要给另外的数组分配额外的空间,你必须原地修改输入数组.使用 O(1) 的额外空间解决这一问题. ψ(`∇´)ψ 我的思路 取到字符串的中点,依次交换前后两部分的位置 package string; public class ReverseString { public static void reverseString(char[] s) { char temp; for (int…
本题来自<剑指offer> 替换空格 题目: 请实现一个函数,将一个字符串中的每个空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 思路: 方案一:空间优先,在原数组的基础上进行替换,没替换一次就将后面的字符串向后挪两个位置 step1:查询空格的个数,在此基础上申请空格数两倍的位置 step2:从后面向前遍历,如果遇到空格就加入‘’02%‘’,否则就继续挪动非空格字符,直到空格遍历完.代码采用了c++编程 方案二:可申…
剑指 Offer 44. 数字序列中某一位的数字 Offer_44 题目描述 题解分析 java代码 package com.walegarrett.offer; /** * @Author WaleGarrett * @Date 2021/2/8 10:01 */ /** * 题目描述: * 数字以0123456789101112131415-的格式序列化到一个字符序列中.在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4,等等. * 请写一个函数,求任意第n位对应的数字…
本题来自<剑指offer> 旋转数组中的最小数字 题目: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1. NOTE:给出的所有元素都大于0,若数组大小为0,请返回0. 思路: 从问题本身入手,可以看出,数据局部有序,思考数据中是否重复.属于查找范畴,顺序查找肯定可以,需要O(n)时间,数据有序可以考虑二分查找为log(n)时间内…
题目:输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回). 首先定义一下链表中的节点,关于链表这个数据结构在另外一篇文章中会详细讲 function ListNode(val) { this.val = val; this.next = null; } 理清一下思路,我们要反转一个链表,可以遍历链表,将链表中的元素存到一个数组中,然后按照反转的顺序保存 好了,思路清晰了,那我们当然是要用栈这个数据结构,要记住,在改变顺序或者操作数组的时候,是和栈分不开的 var reservep…
剑指 Offer 56 - II. 数组中数字出现的次数 II Offer_56_2 题目详情 解题思路 java代码 package com.walegarrett.offer; /** * @Author WaleGarrett * @Date 2021/2/10 13:43 */ /** * 题目描述:在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次.请找出那个只出现一次的数字. */ public class Offer_56_2 { public int sing…
剑指 Offer 05. 替换空格 class Solution { public String replaceSpace(String s) { StringBuilder str = new StringBuilder(s); int p1 = str.length() - 1; for(int i = 0; i <= p1; i++){ if(str.charAt(i) == ' ') str.append(" "); } int p2 = str.length() - 1…
题目 剑指 Offer 67. 把字符串转换成整数 思路1 根据题意,要解决这题,首先要判断的条件有: 不包括首位空格 第一位必须为:+.-.数字三者其一,否则不合法 数字必须连续的,如果遇到非数字,结束判断 判断结果要在 \(-2^{31}\)~\((2^{31}-1)\) 之间,如果超过的话,就输出最大值 / 最小值 我们用sign记录符号.res记录每次遍历累加的值.threshold记录阈值(我们阈值取Integer.MAX_VALUE/10,即小了一位数,作用后面再说).index记录…
剑指Offer--算法复杂度中的O(logN)底数是多少 前言 无论是计算机算法概论.还是数据结构书中,关于算法的时间复杂度很多都用包含O(logN)这样的描述,但是却没有明确说logN的底数究竟是多少.算法中log级别的时间复杂度都是由于使用了分治思想,这个底数直接由分治的复杂度决定.如果采用二分法,那么就会以2为底数,三分法就会以3为底数,其他亦然. 不过无论底数是什么,log级别的渐进意义是一样的.也就是说该算法的时间复杂度的增长与处理数据多少的增长的关系是一样的. 我们先考虑O(logx…
剑指 Offer 67. 把字符串转换成整数 Offer_67 题目描述 题解分析 java代码 package com.walegarrett.offer; /** * @Author WaleGarrett * @Date 2021/2/15 23:13 */ /** * 题目描述:写一个函数 StrToInt,实现把字符串转换成整数这个功能.不能使用 atoi 或者其他类似的库函数. */ public class Offer_67 { public int strToInt(String…
剑指 Offer 56 - I. 数组中数字出现的次数 Offer_56_1 题目描述 解题思路 java代码 /** * 方法一:数位方法 */ class Offer_56_1_2 { public int[] singleNumbers(int[] nums) { int ans = 0; for(int num : nums){ ans^=num; } int pos = 1; while((pos & ans) == 0){ pos<<=1; } int a=0, b=0;…
[剑指Offer]旋转数组中的最小数字 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://www.nowcoder.com/ta/coding-interviews 题目描述: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1. NOTE:给出的所有元素都大于0,若数组大小为0,请返回0. W…
[剑指Offer]删除链表中重复的结点 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews 题目描述: 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5 解题方法 要删除有序链表中所有的重复节点,而头结点有可能就是重复节点.这…
[剑指Offer]字符流中第一个不重复的字符 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews 题目描述: 请实现一个函数用来找出字符流中第一个只出现一次的字符.例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g".当从该字符流中读出前六个字符"google"时,第一个只出现一次的字符是"l"…
一.题目 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P.并将P对1000000007取模的结果输出. 即输出P%1000000007 二.思路 方法一: 看到这个题目,我们的第一反应是顺序扫描整个数组.没扫描到一个数组的时候,逐个比较该数字和它后面的数字的大小.如果后面的数字比它小,则这两个数字就组成了一个逆序对.假设数组中含有n个数字.由于每个数字都要和O(n)这个数字比较,因此这个算法的时间复杂度为O(n^2).…
本文参考自<剑指offer>一书,代码采用Java语言.  更多:<剑指Offer>Java实现合集 题目 请实现一个函数,把字符串中的每个空格替换成"%20".例如输入“We are happy.”,则输出“We%20are%20happy.”. 思路 首先要询问面试官是新建一个字符串还是在原有的字符串上修改,本题要求在原有字符串上进行修改. 若从前往后依次替换,在每次遇到空格字符时,都需要移动后面O(n)个字符,对于含有O(n)个空格字符的字符串而言,总的时…
题目描述 请实现一个函数,将一个字符串中的每个空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy.   注意事项: <剑指offer>上的length为str的最大长度空间 而牛客上的lenght为str的长度,包括了'\0' 由于str为数组指针,故只能在原数组上修改,选用后替换法   class Solution { public: void replaceSpace(char *str, int length) { )…
该题目来源于牛客网<剑指offer>专题. 请实现一个函数,将一个字符串中的每个空格替换成"%20". 例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. Go语言实现: func replaceSpace(str string) string { //最后一个参数为替换次数,负数表示没有次数限制 str = strings.Replace(str, " ", "%20", -1) r…
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 请实现一个函数用来找出字符流中第一个只出现一次的字符.例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是'g'.当从该字符流中读出前六个字符"google"时,第一个只出现一次的字符是'l'. 思路 字符只能一个一个从字符流中读出来,因此要定义一个容器来保存字符以及其在字符流中的位置. 为尽可能搞笑解决问题,要在O…
0.简介       本文是牛客网<剑指offer>笔记. 1.题目 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针.例如,链表1->2->3->3->4->4->5 处理后为 1->2->5   2.思路       链表有0个节点 链表有1个节点 链表有2个以上节点 三个指针和两层循环实现删除链表中重复的节点. 首先,检查边界条件(链表有0个节点或链表有1个节点)时,返回头结点:其次,避免由于第…
剑指 Offer 03. 数组中重复的数字 知识点:数组:哈希表:萝卜占坑思想 题目描述 找出数组中重复的数字. 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次.请找出数组中任意一个重复的数字. 示例 输入: [2, 3, 1, 0, 2, 5, 3] 输出:2 或 3 解法一:暴力法 class Solution { public int findRepeatNumber(int[] nu…
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 在一个排序的链表中,如何删除重复的结点?例如,在图3.4(a)中重复结点被删除之后,链表如图3.4(b)所示. 思路 设置一个preNode,用于记录当前结点的前一个结点,再设置一个布尔变量needDelete,如果当前结点和后一结点的值相同(记该值为dupVal),needDelete赋值为真. 当needDelete为真时,通过循环往后找到第一个不为dupVal的结点,…
  本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 请你写一个函数StrToInt,实现把字符串转换成整数这个功能.当然,不能使用atoi或者其他类似的库函数. 思路 题目很简单,主要就是实现对每个字符转化为数字,并进行累加即可.但是有很多特殊情况都需要考虑进去,例如null.空字符串.带有正负号.字符不是数字.溢出等等. 对于非法的特殊输入,返回值为0,还要用一个全局变量进行标记. 写代码时一定要考虑清楚各种测试用例.…
一.题目: 请实现一个函数,将一个字符串中的空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 二.思路: Python代码,先找到空格再添加字符串,添加用+即可. 三.代码:      …
该题目来源于牛客网<剑指offer>专题. 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数. 输入描述: 输入一个字符串,包括数字字母符号,可以为空. 输出描述: 如果是合法的数值表达则返回该数字,数值为0或者字符串,不是一个合法的数值则返回0. ​ Go语言实现: //0-9的ascii码分别是48-57,"-"是45,"+"是43 func strToInt(str string) int { length := len(str) i…