剑指offer之46-50题解


目录

  1. 孩子们的游戏
  2. 求1+2+3+…+n
  3. 不用加减乘除做加法
  4. 把字符串转换成整数
  5. 数组中重复的数字

46. 孩子们的游戏

(一)题目描述

每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0…m-1报数…这样下去…直到剩下最后一个小朋友,可以不用表演,并且拿到牛客名贵的“名侦探柯南”典藏版(名额有限哦!!_)。请你试着想下,哪个小朋友会得到这份礼品呢?(注:小朋友的编号是从0到n-1)

(二)思路

  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. 不用加减乘除做加法

(一)题目描述

写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。

(二)思路

  1. a ^ b (不同为1)表示没有考虑进位的情况下两数的和,(a & b) <<1 (& 相同为1,即要进位)就是进位。
  2. 终止原因就是 (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。

(二)思路

  1. 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

(二)思路

  1. 创建一个长度为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题解相关推荐

  1. 【剑指Offer】俯视50题之31 - 40题

    [剑指Offer]俯视50题之31 - 40题 面试题31连续子数组的最大和 面试题32从1到n整数中1出现的次数 面试题33把数组排成最小的数 面试题34丑数 面试题35第一个仅仅出现一次的字符 面 ...

  2. GitHub#algorithm#:《剑指offer》 的50道面试题

    Copyright(C) nonstriater:https://github.com/nonstriater/Learn-Algorithms <剑指offer> 这本书给出了50到面试 ...

  3. 【剑指offer】java版题解(持续更新)

    本文为刷[剑指]备战校招的过程,持续更新 备战虽晚但卷,共勉! 目录,按刷题时间排序 斐波那契数列 用两个栈实现队列 二维数组中的查找 包含min函数的栈 从尾到头打印链表 反转链表 复杂链表的复制 ...

  4. 剑指Offer - 面试题50. 第一个只出现一次的字符(unordered_map)

    1. 题目 在字符串 s 中找出第一个只出现一次的字符.如果没有,返回一个单空格. 示例: s = "abaccdeff" 返回 "b"s = "&q ...

  5. 【剑指Offer】俯视50题之1-10题

    面试题1赋值运算符函数  面试题2 实现Singleton模式  面试题3 二维数组中的查找   面试题4 替换空格   面试题5 从头到尾打印链表   面试题6 重建二叉树   面试题7 用两个栈实 ...

  6. 剑指offer面试题50. 第一个只出现一次的字符(哈希表)

    题目描述 在字符串 s 中找出第一个只出现一次的字符.如果没有,返回一个单空格. s 只包含小写字母. 思路 详见链接 代码 class Solution:def firstUniqueChar(se ...

  7. LeetCode力扣(剑指offer 41-68)

    目录 剑指 Offer 41. 数据流中的中位数 剑指 Offer 42. 连续子数组的最大和 剑指 Offer 43. 1-n 整数中 1 出现的次数 剑指 Offer 44. 数字序列中某一位的数 ...

  8. C++剑指offer刷题笔记

    说明:本文是本人刷题后整理的剑指offer1-68题的题解笔记,编程语言为c++. 主要参考刷题笔记网址:leetcode剑指offer 次要参考刷题笔记网址:牛客剑指offer 剑指OFFER 面试 ...

  9. 剑指offer第二版答案详细版(带详细解题思路)

    1.滑动窗口的最大值(剑指offer原59题) 解题思路:其实是一个队列的问题,用一个队列去维护当前窗口中的所有元素:首先将超出窗口中的队头元素先删掉,然后将新的元素插入当前窗口中,插入时要判断新插入 ...

  10. JS版剑指offer

    JS版剑指offer JS刷题总结 牛客网 递归算法的时间复杂度:递归的总次数*每次递归的数量. 递归算法的空间复杂度:递归的深度*每次递归创建变量的个数. 二叉树(12道): 剑指Offer(4): ...

最新文章

  1. mysql常用字段及长度
  2. CloudBees发布“Jenkins X”:面向部署到Kubernetes中的现代云应用的CI/CD解决方案
  3. nb移动udp_hwasy-geomagnetism-nbiot
  4. DLL内线程同步主线程研究(子线程代码放到主线程执行)
  5. 功能测试常用6种方法_16种常用的数据分析方法聚类分析
  6. Gentoo 网络接口配置文件说明
  7. 关于jHipster框架在构建中的出现的error修复
  8. Fiddler中response乱码的解决方案
  9. Android之使用MediaPlayer和SurfaceView组件播放一个简单的视频
  10. C++简单的下载文件操作的封装
  11. android sdk更新后出现please update ADT to the latest ve
  12. JS连续赋值与求值顺序
  13. 微信小程序开发的基本流程
  14. EnableViewState属性的应用
  15. B2B行业使用什么CRM好? B2B行业的专属CRM—协同级CRM
  16. 5g消息服务器,5G消息开启信息服务新篇章
  17. 基于天猫订单的数据分析
  18. SpringBoot集成OAuth2.0有新方案了
  19. 如何快速掌握技术和知识点
  20. 【读书笔记】概率图模型——基于R语言(一)

热门文章

  1. CSS中的选择器之类选择器和id选择器
  2. SAS实现四十年连续增长,2015年全球营收达31.6亿美元
  3. 10 个非常有用的 AngularJS 框架
  4. Mysql学习笔记(三)运算符和控制流函数
  5. 来和小伙伴一起学习响应式网页设计吧
  6. 黑客攻击澳大利亚政府网站 抗议互联网过滤器
  7. 微博客之后有可能是“切客”
  8. 汽车发动机参数指标含义
  9. CodeForces - 628D Magic Numbers(数位dp)
  10. CodeForces - 1400F x-prime Substrings(AC自动机+dp)