剑指offer之46-50题解
剑指offer之46-50题解
目录
- 孩子们的游戏
- 求1+2+3+…+n
- 不用加减乘除做加法
- 把字符串转换成整数
- 数组中重复的数字
46. 孩子们的游戏
(一)题目描述
每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0…m-1报数…这样下去…直到剩下最后一个小朋友,可以不用表演,并且拿到牛客名贵的“名侦探柯南”典藏版(名额有限哦!!_)。请你试着想下,哪个小朋友会得到这份礼品呢?(注:小朋友的编号是从0到n-1)
(二)思路
- 约瑟夫环,圆圈的长度为n的解可以看成长度n-1的解加上报数长度m。因为是圆圈,所以最后需要对n取余。
(三)代码实现
public class Solution {public int LastRemaining_Solution(int n, int m) {if (n == 0)return -1;if (n == 1)return 0;return (LastRemaining_Solution(n - 1, m) + m) % n;}
}
47. 求1+2+3+…+n
(一)题目描述
求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
(二)思路
条件与 && 具有短路原则,即在第一个条件语句为 false 的情况下不会执行第二个条件语句。利用这一特性,将递归的返回条件取非然后作为 && 的第一个条件语句,递归的主题转换为第二个条件语句,那么当递归的返回条件为 true 的情况下就不会执行递归的主体部分,递归返回。
本题递归的返回条件为 n<=0 ,取非后就是 n>0;递归的主体部分为 sum += Sum_Solution(n-1),转换为条件语句后就是(sum += Sum_Solution(n-1))>0。
(三)代码实现
public class Solution {public int Sum_Solution(int n) {int sum = n;boolean b = (n > 0) && ((sum += Sum_Solution(n - 1)) > 0);return sum;}
}
48. 不用加减乘除做加法
(一)题目描述
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
(二)思路
- a ^ b (不同为1)表示没有考虑进位的情况下两数的和,(a & b) <<1 (& 相同为1,即要进位)就是进位。
- 终止原因就是 (a&b)<<1 最右边会多一个0,那么继续递归,进位最右边的0就会增加,最后全部为0,递归终止。
(三)代码实现
public class Solution {public int Add(int num1, int num2) {return num2 == 0 ? num1 : Add(num1 ^ num2, (num1 & num2) << 1);}
}
49. 把字符串转换成整数
(一)题目描述
将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。
(二)思路
ret = ret * 10 + (c - '0')
每次来一个元素则进位。比如214,来2,ret=2, 来1的时候ret*10+2= 21;再来4为214.
(三)代码实现
public class Solution {public int StrToInt(String str) {if (str == null || str.length() == 0)return 0;boolean isNegative = str.charAt(0) == '-';int ret = 0;for (int i = 0; i < str.length(); i++) {char c = str.charAt(i);if (i == 0 && (c == '+' || c == '-'))continue;if (c < '0' || c > '9')return 0;ret = ret * 10 + (c - '0');}return isNegative ? -ret : ret;}
}
50. 数组中重复的数字
(一)题目描述
在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2
(二)思路
- 创建一个长度为length的assist数组,遍历numbers数组,将数组填入对应的assist数组,如果位置不为null,那么加入duplication[0],返回即可。
(三)代码实现
public boolean duplicate(int numbers[],int length,int [] duplication) {int[] assist = new int[length];for (int i = 0; i < length; i++) {if (assist[numbers[i]]==0){assist[numbers[i]]++;}else {duplication[0] = numbers[i];return true;}}return false;}
}
剑指offer之46-50题解相关推荐
- 【剑指Offer】俯视50题之31 - 40题
[剑指Offer]俯视50题之31 - 40题 面试题31连续子数组的最大和 面试题32从1到n整数中1出现的次数 面试题33把数组排成最小的数 面试题34丑数 面试题35第一个仅仅出现一次的字符 面 ...
- GitHub#algorithm#:《剑指offer》 的50道面试题
Copyright(C) nonstriater:https://github.com/nonstriater/Learn-Algorithms <剑指offer> 这本书给出了50到面试 ...
- 【剑指offer】java版题解(持续更新)
本文为刷[剑指]备战校招的过程,持续更新 备战虽晚但卷,共勉! 目录,按刷题时间排序 斐波那契数列 用两个栈实现队列 二维数组中的查找 包含min函数的栈 从尾到头打印链表 反转链表 复杂链表的复制 ...
- 剑指Offer - 面试题50. 第一个只出现一次的字符(unordered_map)
1. 题目 在字符串 s 中找出第一个只出现一次的字符.如果没有,返回一个单空格. 示例: s = "abaccdeff" 返回 "b"s = "&q ...
- 【剑指Offer】俯视50题之1-10题
面试题1赋值运算符函数 面试题2 实现Singleton模式 面试题3 二维数组中的查找 面试题4 替换空格 面试题5 从头到尾打印链表 面试题6 重建二叉树 面试题7 用两个栈实 ...
- 剑指offer面试题50. 第一个只出现一次的字符(哈希表)
题目描述 在字符串 s 中找出第一个只出现一次的字符.如果没有,返回一个单空格. s 只包含小写字母. 思路 详见链接 代码 class Solution:def firstUniqueChar(se ...
- LeetCode力扣(剑指offer 41-68)
目录 剑指 Offer 41. 数据流中的中位数 剑指 Offer 42. 连续子数组的最大和 剑指 Offer 43. 1-n 整数中 1 出现的次数 剑指 Offer 44. 数字序列中某一位的数 ...
- C++剑指offer刷题笔记
说明:本文是本人刷题后整理的剑指offer1-68题的题解笔记,编程语言为c++. 主要参考刷题笔记网址:leetcode剑指offer 次要参考刷题笔记网址:牛客剑指offer 剑指OFFER 面试 ...
- 剑指offer第二版答案详细版(带详细解题思路)
1.滑动窗口的最大值(剑指offer原59题) 解题思路:其实是一个队列的问题,用一个队列去维护当前窗口中的所有元素:首先将超出窗口中的队头元素先删掉,然后将新的元素插入当前窗口中,插入时要判断新插入 ...
- JS版剑指offer
JS版剑指offer JS刷题总结 牛客网 递归算法的时间复杂度:递归的总次数*每次递归的数量. 递归算法的空间复杂度:递归的深度*每次递归创建变量的个数. 二叉树(12道): 剑指Offer(4): ...
最新文章
- mysql常用字段及长度
- CloudBees发布“Jenkins X”:面向部署到Kubernetes中的现代云应用的CI/CD解决方案
- nb移动udp_hwasy-geomagnetism-nbiot
- DLL内线程同步主线程研究(子线程代码放到主线程执行)
- 功能测试常用6种方法_16种常用的数据分析方法聚类分析
- Gentoo 网络接口配置文件说明
- 关于jHipster框架在构建中的出现的error修复
- Fiddler中response乱码的解决方案
- Android之使用MediaPlayer和SurfaceView组件播放一个简单的视频
- C++简单的下载文件操作的封装
- android sdk更新后出现please update ADT to the latest ve
- JS连续赋值与求值顺序
- 微信小程序开发的基本流程
- EnableViewState属性的应用
- B2B行业使用什么CRM好? B2B行业的专属CRM—协同级CRM
- 5g消息服务器,5G消息开启信息服务新篇章
- 基于天猫订单的数据分析
- SpringBoot集成OAuth2.0有新方案了
- 如何快速掌握技术和知识点
- 【读书笔记】概率图模型——基于R语言(一)
热门文章
- CSS中的选择器之类选择器和id选择器
- SAS实现四十年连续增长,2015年全球营收达31.6亿美元
- 10 个非常有用的 AngularJS 框架
- Mysql学习笔记(三)运算符和控制流函数
- 来和小伙伴一起学习响应式网页设计吧
- 黑客攻击澳大利亚政府网站 抗议互联网过滤器
- 微博客之后有可能是“切客”
- 汽车发动机参数指标含义
- CodeForces - 628D Magic Numbers(数位dp)
- CodeForces - 1400F x-prime Substrings(AC自动机+dp)