自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(7)
  • 收藏
  • 关注

原创 用一个栈对另一个栈排序Java实现

题目要求:给定一个栈,让你用一个辅助栈对其元素进行排序。思路:设原始栈为s,辅助栈为helper。1.s出栈栈顶元素,记为pop。2.用pop和helper的栈顶元素比较,若helper为空,或者pop小于等于helper栈顶元素,就直接让pop入栈helper。(这一步相当于,若pop小于helper栈顶元素,pop直接入栈)若执行了这一步,则3、4不用执行,再次从第一步继续执行。3.若pop大于helper栈顶元素,则就让helper栈顶元素出栈并入栈s。(这一步相当于,若pop大于helpe

2020-10-25 10:04:48 199

原创 递归实现反转栈Java

烧脑提醒!烧脑提醒!烧脑提醒!不皮了,下面开始正题。题目要求:用递归实现栈反转。我走的弯路:首先,我刚开始的想法,我觉得,递归其实本质也是个栈类型的数据结构,所以可以利用递归过程的栈来实现反转。其实,这个思路有问题,因为你递归的过程中,其实也是在出栈操作,当你递归到栈底时,此时,递归函数中最后一个值也是栈底元素,此时,再入栈,其实又原路返回了,所以,必须在此基础上,再递归一次,我看到网上有这种解法,太恶心了,两个递归嵌套。其实这种解法并不是此题的本意,此题的本意是考查对递归思想的深入理解。我的解法

2020-10-24 18:02:10 568 1

原创 三元组a+b+c=0算法(三数相加)

题目:给定一个乱序数组 {-1, 0, 1, 2, -1, -4},寻找 a + b + c = 0的三元组。并去重。思路:一,先排序,从小到大。二,定义三个指针,第一个a,指向数组第一个位置,第二个b,指向第二个位置,第三个c,指向最后一位。三,然后,计算a+b+c,看是否等于0。1.如果等于0,将结果放入set中保存,然后a不动,b往右移动一位,c往左移动一位,继续计算a+b+c。2.如果小于0,则b往右移动一位,继续计算a+b+c。3.如果大于0,则c往左移动一位,继续计算a+b+c。

2020-10-22 23:20:27 2157

原创 奇数在偶数前面

算法要求:随机给定一个整数数组,设计一个算法,使得数组中奇数都位于偶数前面,并且奇数和偶数的相对位置不变。思路很简单,先遍历一遍数组,计算出有多少个奇数,奇数+1就是偶数开始存放的位置,然后,创建一个新数组,然后,再遍历一遍数组,遇到奇数就从头添加进新数组,遇到偶数,之前计算出的偶数位置往后添加。代码:public static void main(String[] args) { //随机给定一个整数数组,设计一个算法,使得数组中奇数都位于偶数前面,并且奇数和偶数的相对位置不变 int[]

2020-10-18 17:42:33 259 1

原创 斐波那契数列Java

数列:0,1,1,2,3,5,8,13…其实就是每一个数都等于前面两位的和简单思路就是递归,输入n,就是斐波那契的第n位的值,然后当递归到n时,递归结束,输出第n位的值。代码:public static int n=2;//出门ab就有两位了,因此n初始为2 public static void main(String[] args) { int num=6; int result=feiBoNaQi(num,0,1); System.out.println(result); }

2020-10-18 17:19:49 204

原创 Java实现单链表反转(头插法就地反转)

此算法题,需要在纸上演算一下,画一个单链表,然后用头插法模拟链表反转,所谓头插法,就是有一个头指针,一直指向头结点。我尝试过两个指针,发现做不到,头插法必须要有三个指针,一个是头指针,一直指向头结点,另外一个指针指向要断开节点的前一个,最后一个指向要断开节点的后一位。代码:public static void main(String[] args) { //头插法就地反转 LinkNode node=new LinkNode(1); node.next=new LinkNode(2);

2020-10-18 17:09:00 695

原创 Java实现快速排序,深入解释为什么从右边开始

先讲一下快排的思想:先抓取数组第一个数,记为key,一趟排序后,将这个数放在最终位置,也就是说,第一趟排序后,这个数左边都是比它小的数,右边都是比它大的数。例如:2,1,4,3抓取第一个数2,记为key,一趟排序后,2放在第二个位置:1,2,4,3此时,2的左边都比它小,右边都比它大。此算法需要两个指针,分别从最左边和最右边开始向中间遍历。如果抓取最左边的数作为key,那么,需要先从右边的指针往中间遍历,遇到比key小的数停下,然后左边的指针开始从左向右遍历,遇到比key大的数停下,然后左右指针的

2020-10-18 10:33:54 1056 5

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除