![](https://img-blog.csdnimg.cn/20200904203527538.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
牛客之剑指offer【Java题解】
记录自己剑指offer思路
Draco-_-
一切理论都是灰色的,唯生命之树常青。
展开
-
汽水瓶
题目有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝?输入描述输入文件最多包含10组测试数据,每个数据占一行,仅包含一个正整数n(1<=n<=100),表示小原创 2021-03-19 10:55:04 · 168 阅读 · 0 评论 -
【6】顺时针打印矩阵
题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.解题思路对于每一次循环都可以看做是从左到右、从上到下、从右到左、从下到上各一遍,而每次循环的开始的时候,行标和列标都是相同的,所以循环的条件是col>2*i&&row>2*i代码实现imp原创 2020-10-09 15:53:04 · 66 阅读 · 0 评论 -
【5】把数组排成最小的数
题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。解题思路定义一个比较大小的函数,num1+num2与num2+num1比较大小,若num1>num2,则说明num2要放在num1前面,所以要有一个交换。代码实现import java.util.ArrayList;public class Solution { public String原创 2020-09-29 09:41:46 · 70 阅读 · 0 评论 -
【4】二维数组中的查找
题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。解题思路1(简易想法)时间复杂度为O(n2),基本思路就是对于每一行每一列都进行查找对比。实现代码public class Solution { public boolean Find(int target, int [][] array) { for(int i=0;i&原创 2020-09-27 14:55:34 · 69 阅读 · 0 评论 -
【3】栈的压入、弹出序列
题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)解题思路1、定义两个数组下标 i,j,下标 i 指向pushA第一个位置,下标 j 指向popA第一个位置2、若pushA[i]==popA[j],下标都后移一位,然后检查popA[j]与原创 2020-09-05 15:11:36 · 86 阅读 · 0 评论 -
【2】包含min函数的栈
题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。解题思路1、首先定义两个数据栈 stack 和 min ,其中stack用于存放所有的数据,min用于存放每次push的最小值。2、push函数:直接push进stack栈,而min栈,若是空栈直接push,若不是空栈,判断push的数据与min栈的栈顶元素谁小,放入小的那个元素。3、pop函数:每次pop的时候,两个数据栈都要pop出元素,以确保min栈顶的最小值存在于stack栈原创 2020-09-05 10:17:44 · 91 阅读 · 0 评论 -
【1】用两个栈实现队列
题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。解题思路1、先要明白两件事情:栈【先进后出】,队列【先进先出】2、定义两个栈,stack1只负责进栈,stack2只负责出栈。3、每当数据进队列,就让他们先进入stack1中,4、而当数据出队列,就让他们先从stack1中pop出到stack2中,之后由stack2 pop出最后的数据。import java.util.Stack;public class Solution { St原创 2020-09-04 20:51:25 · 104 阅读 · 0 评论