剑指Offer--Java实现栈和队列的互模拟操作 栈模拟队列   题目:JAVA实现用两个栈来实现一个队列,完成队列的Push和Pop操作.队列中的元素为int类型.   思路:其实就是把队列正常入栈,出栈的时候先把栈里的内容按顺序搬到另一个栈里,负负得正,这样再按顺序出栈的时候,就成了入栈前队列的顺序 package cn.edu.ujn.demo; import java.util.Stack; import org.junit.Test; public class Stack2Queue…
经过数月的努力,终于更完了牛客网的66道剑指offer,以下的顺序和大家在牛客网的顺序是一样的(排序也花了不少时间),希望对大家找工作/提高算法能力能起到些许帮助. 每天一道剑指offer-二维数组中的查找 https://mp.weixin.qq.com/s?__biz=MzI5MzYzMDAwNw==&mid=2247484262&idx=2&sn=83fb17338c606e2080fe75331f1528f7&chksm=ec6e7a3edb19f32867e399…
在看剑指offer的时候,感觉这三个题目很像,都是用哈希表可以解决,所以把这三个题整理出来,以供复习. 剑指offer35题:第一个只出现一次的字符 题目描述:在字符串中找出第一个只出现一次的字符.如输入“abaccdeff”,则输出‘b’. 题目分析:统计字符串每个字符出现的次数,然后找出第一个只出现一次的字符.我们可以定义一个哈希表,这个哈希表的键值key是字符,value是该字符出现的次数.这样我们需要对字符串扫描两次,第一次扫描字符串时,每扫描一个字符就在哈希表对应项中把次数加1.第二次…
[Java实现]剑指Offer53.2--0~n-1中缺失的数字:面试真题,两种思路分享 前面有另一道面试题[Java实现]剑指offer53.1--在排序数组中查找数字(LeetCode34:在排序数组中查找元素的起始位置)都是二分类型的,可以借鉴一下思路 题意解析: 这道题很特别,所有的测试用例都很有特点,都是形如[0,1,2,3,5,6,7]这样的,突然跳跃这个数值的索引,即是问题的解 具体如下: 前半部分数组中:索引和数值相等 后半部分数组中:索引比数值小1 第一种:二分思想 不同于以往…
本题来自<剑指offer> 旋转数组中的最小数字 题目: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1. NOTE:给出的所有元素都大于0,若数组大小为0,请返回0. 思路: 从问题本身入手,可以看出,数据局部有序,思考数据中是否重复.属于查找范畴,顺序查找肯定可以,需要O(n)时间,数据有序可以考虑二分查找为log(n)时间内…
剑指 Offer 62. 圆圈中最后剩下的数字 Offer_62 题目描述 方法一:使用链表模拟 这种方法是暴力方法,时间复杂度为O(nm),在本题中数据量过大会超时. 方法二:递归方法 package com.walegarrett.offer; /** * @Author WaleGarrett * @Date 2021/2/13 12:17 */ /** * 题目详情:0,1,···,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字(删除后从下一个数字开始计数).…
[剑指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>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 0, 1, …, n-1这n个数字排成一个圆圈,从数字0开始每次从这个圆圈里删除第m个数字.求出这个圆圈里剩下的最后一个数字. 思路 方法一:采用链表来存放数据,每次对长度取余来实现循环 将所有数字放入LinkedList链表中(LinkedList比ArrayList更适合增删操作).假设当前删除的结点下标为removeIndex,则下一个要删除的结点的下标为:(re…
序数组中查找元素的起始位置):思路分享 <剑指offer>题目和LeetCode主站本质是一样的,想要找到target数目,也需要找到左右边界 题目解析: 在一个排序数组中,找到target的左右边界,从而得到target的数量 第一感觉:二分查找,因为数组是有序的 灵感闪现!!! 灵感闪现!!! 灵感闪现!!! 给定一个数字target,找到它在排序数组中插入的位置!!! 这道题就是二分插入!你品,你细品! 下面说一下具体思路和步骤: 二分查找的基本形式,边界.判断条件构建 首先找右边界:将…
1.1.题目1 剑指 Offer 64. 求1+2+-+n 1.2.解法 这题看评论区真的绝了,都是人才,各个说话都好听,我看到个还有用异常来结束的就离谱. 这题用了&&当左边为false,右边不执行的原理. 1.3.代码 class Solution { public int sumNums(int n) { boolean flag = n > 1 && (n += sumNums(n - 1)) > 0; return n; } } 2.1.题目2 剑指…