
剑指Offer
刷题思路解析及详细代码实现。
不吃猫的鱼c
Stay hungry,Stay foolish!
展开
-
Java篇—二维数组的查找
题目描述:在一个二维数组中,每一行都是按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。解题思路:利用该二维数组的特性(行列都是递增的),用所查整数与右上角的元素进行比较,如果所查整数小于右上角数值(该元素为第一行的最大元素,最后一列的最小元素),则列col--,否则,行row++,查找结束的时候,如果还未...原创 2019-07-20 13:54:57 · 449 阅读 · 0 评论 -
Java篇—和为S的两个数字
题目描述:输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得它们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的那一对。思路分析:由于是递增排序的数组,所以,我们可以使用两个指针,分别指向数组的首元素和尾元素(一个从前往后,指向较小的数,一个从后往前,指向较大的数),这样找到的两个数的乘积必然是最小的。当两个数的和大于S时,较大的数字指针向左移动,当两个数的和小...原创 2019-08-15 22:00:35 · 242 阅读 · 0 评论 -
Java篇—字符串中连续最长的数字串
题目描述:读入一个字符串str,输出字符串str中连续最长的数字串输入描述:每个测试输入包含1个测试用例,一个字符串str,长度不超过255。输出描述:在一行内输出str中里连续最长的数字串和长度。输入样例:abcd12345ed125ss123456789输出样例:123456789,9题目解析:step 1:将输入的字符串转化为字符数组;step...原创 2019-08-13 11:54:07 · 2838 阅读 · 0 评论 -
Java篇—二进制中1的个数(思路解析及代码实现)
题目描述:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。解法1思路解析:step 1:num的二进制的最右边位与1相与,如果不为0,则count加1;step 2:否则,对1左移一位,继续与num的二进制的最右边数的第二位进行相与;step 3:依次循环,即可完成。解法1代码实现:import java.util.Scanner;public cl...原创 2019-08-04 18:25:44 · 958 阅读 · 0 评论 -
Java篇—数组中出现次数超过一半的数字
题目描述:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1, 2, 3, 2, 2, 2, 5, 4, 2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果这个数字不存在,输出0。解法1(算法实现—不需要对数组进行任何操作)思路解析:step 1:把数组中的第一个元素保存下来,放入result中,记录次数count为1...原创 2019-08-03 00:35:22 · 634 阅读 · 0 评论 -
Java篇—驼峰命名法(CamelCase)
骆驼式命名法定义:就是当变量名或函数名是由一个或多个单词连结在一起,而构成的唯一识别字时,第一个单词以小写字母开始;从第二个单词开始以后的每个单词的首字母都采用大写字母,例如:myFirstName、myLastName,这样的变量名看上去就像骆驼峰一样此起彼伏,故得名。题目描述:从C/C++转到Java的程序员,一开始最不习惯的就是变量命名方式的改变。C语言风格使用下划线分隔多个单词,...原创 2019-07-25 01:11:26 · 2471 阅读 · 0 评论 -
Java篇—单词倒排
题目描述:对字符串中的所有单词进行倒排。题目说明:1、每个单词是以26个大写或小写英文字母构成;2、非构成单词的字符均视为单词间隔符;3、要求倒排后的单词间隔符以一个空格表示;如果原字符串中相邻单词间有多个间隔符时,倒排转换后也只允许出现一个空格间隔符;4、每个单词最长20个字母;问题分析:输入的是一个字符串,这个字符串中用空格或者其他非字母字符作为间隔符,间隔符可...原创 2019-07-25 00:45:53 · 874 阅读 · 0 评论 -
Java篇—字符串加解密
题目描述:1.对输入的字符串进行加解密,并输出。2.加密方法为:当内容是英文字母时则用该英文字母的后一个字母替换,同时字母变换大小写,如字母a时则替换为B;字母Z时则替换为a;当内容是数字时则把该数字加1,如0替换1,1替换2,9替换0;其他字符不做变化。3.解密方法为加密的逆过程。解题思路:step 1:先将字符串变量转换为字符数组,然后对字符进行相对应的转换,调...原创 2019-07-22 20:45:45 · 1329 阅读 · 0 评论 -
Java篇—根据输入的日期(年月日),输出这一年的第几天
题目描述:根据输入的日期,计算是这一年的第几天。解题思路:step 1:判断输入日期的合法性,如果输入不合法返回-1;step 2:根据输入的月份,计算从1月到(month - 1)月的天数,如果是二月的话,就要判断该年是否为闰年(闰年,day加29天,反之,day加28天);step 3:根据步骤二计算出来的数值,最后加上输入的date,输出即可。 详细代...原创 2019-07-22 19:56:24 · 9093 阅读 · 3 评论 -
Java篇—左旋转字符串
题目描述:汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=“abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。思路分析:n作为字符串左旋的位置,其实就是将字符串[0,n)放置在字符串[n,length)的后面,从而组成新的字符...原创 2019-08-15 22:35:18 · 576 阅读 · 0 评论