
题
文章平均质量分 71
小矮多
这个作者很懒,什么都没留下…
展开
-
最小栈
问题:用两个栈实现最小栈思路:一个栈作为普通栈,一个栈作为最小栈,一个元素入普通栈,如果最小栈为空,这个元素也入最小栈,如果最小栈不为空,比较这个元素和最小栈栈顶的元素大小,如果小于则入最小栈,否则不入。出栈时,比较出栈元素和最小栈栈顶元素是否相等,如果相等则出最小栈,如果不相等,则不出最小栈。代码:import java.util.Stack;class MinStack{ private Stack<Integer> stack; private Stack<原创 2020-07-17 19:29:55 · 141 阅读 · 0 评论 -
利用栈模拟队列和利用队列模拟栈
问题1:使用2个栈模拟队列思路:入栈到stack1。出栈时判断stack2是否有元素,如果没有,判断stack1是否有元素,如果没有队列为空,如果stack1有元素,将stack1中元素出栈,再入栈到stack2,如果stack2有元素,直接出栈。代码:import java.util.Stack;class MyQueue{ private Stack<Integer> stack1; private Stack<Integer> stack2;原创 2020-07-17 19:16:03 · 255 阅读 · 0 评论 -
左右括号匹配问题
问题:一个字符串只包括‘(’、‘{’、‘[’、‘)’、‘}’、‘]'问括号是否能匹配上,能返回true,不能返回false.分析:分情况①左括号多 false;②右括号多 false;③左右括号不匹配 false④左右括号匹配 true代码: //左右括号匹配问题 // 利用栈 public static boolean isValid(String s) { Stack<Character> stack=new Stack<>原创 2020-07-17 18:08:03 · 793 阅读 · 0 评论 -
List练习题:杨辉三角
思路:代码:public class Main { public static List<List<Integer>> generate(int numRows){ List<List<Integer>> list=new ArrayList<>(); if(numRows==0){ return list; } List<Integer&g原创 2020-07-12 15:24:30 · 291 阅读 · 0 评论 -
单链表练习题:合并两个有序链表(升序)
思路:定义一个新的结点newHead,从头开始比较两个链表的节点的值域,值小的串到newHead后面。代码:public Node mergeList(Node headA,Node headB){Node newHead=new Node(-1);Node temp=newHead;while(headA!=null && headB!=null){if(headA.data<headB.data){temp.next=headA;temp=temp.next;h原创 2020-07-11 19:55:15 · 630 阅读 · 0 评论 -
单链表练习题:判断两个链表是否相交,如果相交返回相交的节点,否则返回null
题目:判断两个链表是否相交,如果相交返回相交的节点,否则返回null。思路:代码:public Node getIntersectionNode(Node headA,Node headB){Node p1=headA;Node p2=headB;int lenA=0;int lenB=0;while(p1!=null){lenA++;p1=p1.next;}while(p2!=null){lenB++;p2=p2.next;}p1=headA;p2=headB;int原创 2020-07-10 09:22:25 · 240 阅读 · 0 评论 -
单链表练习题:判断链表是否有环
题目:判断链表是否有环,如果有返回成环的节点,没有返回null思路:代码:public Node detectCycle(){Node fast=head;Node slow=head;while(fast!=null && fast.next!=null){//判断是否成环if(fast==slow){break;}fast=fast.next.next;slow=slow.next;}if(fast==null||fast.next==null){ret原创 2020-07-10 08:52:43 · 308 阅读 · 0 评论 -
单链表练习题:判断链表是不是回文链表
思路:找到链表的中间节点,然后逆置后半段,再从两边比较对应位置是否值域相等。代码:public boolean chkPalindrome(){if(head==null){return false;}if(head.next==null){return true;}Node fast=head;Node cur=head;//找到中间节点while(fast!=null&&fast.next!=null){fast=fast.next.next;slow=s原创 2020-07-09 21:22:00 · 314 阅读 · 0 评论 -
单链表练习题:给定一个数据,比该数据小的都放到前面,比该数据大的都放到后面,原节点之间的前后顺序不变
题目:给定一个数据,比该数据小的都放到前面,比该数据大的都放到后面,原节点之间的前后顺序不变。思路:定义两段bs—be和as—ae,如果当前节点的值域小于这个数据就放到bs—be段,如果大于就放到as—ae段,最后把两段连起来。代码:public Node partition(int n){if(head==null){return null;}Node cur=head;Node bs=null;Node be=null;Node as=null;Node ae=null;wh原创 2020-07-09 20:27:26 · 448 阅读 · 0 评论 -
单链表练习题:求倒数第k个节点(只允许遍历一次链表)
思路:定义两个变量fast和slow,fast先走k-1步,然后一起走,当fast.next==null时,slow指向倒数第k个节点。代码:public Node findKTH(int k){if(head==null){return null;}if(k<1){throw new RuntimeException("位置错误");}Node fast=head;Node slow=head;for(int i=0;i<k-1;i++){if(fast.next!=原创 2020-07-09 19:55:57 · 294 阅读 · 0 评论 -
单链表练习题:求单链表的中间节点(只允许遍历一次链表)
思路:使用两个变量fast和slow,从head开始一起往后走,fast一次走2步slow一次走一步,当fast走到最后一个节点或者走到null时,slow走到中间。代码:public Node findMiddleNode(){Node fast=head;Node slow=head;while(fast!=null&&fast.next==null){//上面这两个条件不能交换,否则fast如果为null,fast.next会出错fast=fast.next.next;原创 2020-07-09 17:32:30 · 556 阅读 · 0 评论 -
单链表练习题:反转单链表
方法一:思路:定义三个变量(prev cur curNext)的逆置过程代码:public Node reverseList(){Node cur=head;Node prev=null;Node newHead=null;while(cur!=null){Node curNext=cur.next;if(curNext==null){newHead=cur;}cur.next=prev;prev=cur;cur=curNext;}return newHead;}方原创 2020-07-08 21:16:03 · 237 阅读 · 0 评论 -
机器人走方格
题目描述:有一个XxX的网格,一个机器人只能走格点,且只能向右或向下走,要从左上角走到右下角。请设计一个算法,计算机器人有多少种走法。戈丁两个正整数int x,int y,请返回机器人的走法数目。保证x+y小于等于12。输出测试:2,22代码示例:import java.util.Scanenr;public class Robot{public static int count...原创 2019-11-16 20:52:34 · 130 阅读 · 0 评论 -
Fibonacci数列
题目描述:Fibonacci数列的定义是这样的:F[0]=0;F[1]=1;for each i>=2:F[i]=F[i-1]+F[i-2];因此,Fibonacci数列就形如:0,1,1,2,3,5,8,13,…,在Fibonacci数列中的数我们称为Fibonacci数。给你一个N,你想让其变为Fibonacci数,每一步你可以把当前数字X变为X-1或者X+1,现在给你一个数N...原创 2019-11-16 20:31:12 · 164 阅读 · 0 评论 -
神奇的口袋
题目:有一个神奇的口袋,总的容积是40,用这个口袋可以变出一些物品,这些物品的总体积必须是40。John现在有n个想要得到的物品,每个物品的体积分别是a1,a2…an。John可以从这些物品中选择一些,如果选出的物体的总体积是40,那么利用这个神奇的口袋,John就可以得到这些物品。现在的问题是,John有多少种不同的选择物品的方式。题目分析:代码示例:import java.util.Sc...原创 2019-11-13 20:36:34 · 1137 阅读 · 0 评论 -
用两个栈实现队列
题目:用两个栈来实现一个队列,完成队列的Push和Pop操作。队列中的元素为int 类型。题目分析:定义两个栈,栈1用来左入队列,栈2用来出队列,当栈2为空时,栈1全部出栈到栈2,栈2再出栈(出队列)代码示例:import java.util.Stack;public class Main{Stack<Integer> stack1=new Stack<>();...原创 2019-11-13 18:47:12 · 88 阅读 · 0 评论 -
删除公共字符
题目:输入两个字符串,从第一个字符串中删除第二个字符串中所有的字符。例如,输入“They are students.“和“aeiou”,则删除之后的第一个字符串变成"Thy r stdnts."题目分析:遍历两个字符串,如果第一个的字符没有在第二个中就输出。要掌握从键盘输入字符串和字符串的相关函数的使用代码示例:import java.util.Scanner;public class ...原创 2019-11-12 18:23:04 · 133 阅读 · 0 评论 -
买苹果
题目:小易去附近的商店买苹果,奸诈的商贩使用了捆绑交易,只提供6个每袋和8个每袋的包装(包装不可拆分)。可是小易现在只想购买恰好n个苹果,小易想购买尽量少的袋数方便携带,如果不能购买恰好n个苹果,小易将不会购买。题目分析:由于6和8都是偶数,所以奇数个苹果不购买,小于6个也不购买,10个也不买,返回-1;如果刚好苹果个数是8的倍数,返回n/8;否则就返回n/8+1代码示例:import ...原创 2019-11-12 18:04:23 · 260 阅读 · 0 评论 -
标题:数组中的逆序对
题目:有一组数,对于其中任意两个数字,若前面一个大于后面一个数字,则这两个数字组成一个逆序对。用归并排序来解决实际问题,以提高效率。原创 2019-11-09 17:35:30 · 130 阅读 · 0 评论 -
标题:汽水瓶
有这样一道智力题:“某商店规定:三个空气水瓶可以换一瓶汽水。原创 2019-11-09 16:09:03 · 132 阅读 · 0 评论 -
模拟实现 strcpy strcat strcmp strncpy strncat strncmp
用自定义函数模拟实现字符串函数原创 2019-07-06 13:45:51 · 209 阅读 · 0 评论