前言
我们在写算法题的时候都会遇到ACM模式和智能模式(核心代码模式),而一般的竞赛和面试都是ACM模式。
- ACM模式就是自己构造输入数据格式,把需要处理的容器填充好,OJ不会给你任何代码,最后也要控制我们的返回数据格式。
- 核心代码模式就是把要处理的数据都已经放在容器中了,直接写我们的业务逻辑就好了。
如果大家从一开始就在LeetCode上学习算法的话突然参加比赛或者拿到面试题就会很不适应,我第一遇见就一脸懵逼,不过掌握输入输出格式可比做算法题要简单多了!
一、数组的输入格式
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入有几个元素");
int n=sc.nextInt();
int[] nums=new int[n]; print默认空格作为分隔符
System.out.println("请输入咱们的数组");
for(int i=0;i<n;i++){ 循环给数组赋值
nums[i]=sc.nextInt();
}
System.out.println(Arrays.toString(nums)); 输出数组
二、链表的输入格式
public class Main {
static class LinkNode{ 定义节点类
int val;
LinkNode next;
public LinkNode(int val){
this.val=val;
}
}
public static void main(String[] args) {
LinkNode head=new LinkNode(0);
LinkNode p=head;
Scanner sc=new Scanner(System.in);
System.out.println("请输入有几个元素");
int n=sc.nextInt();
int[] nums=new int[n];
System.out.println("请输入咱们的数组");
for(int i=0;i<n;i++){
nums[i]=sc.nextInt();
}
for(int i=0;i<nums.length;i++){
p.next=new LinkNode(nums[i]);
p=p.next;
}
上半部分是输入格式,用了一个数组来输入的
======================================================================================
LinkNode nx =getKthFromEnd(head, 3);
System.out.println(nx.val);
这部分是链表的输出
while(nx!=null){ 我们返回的是一个头结点,所以用它遍历整个链表就可以了
if(nx.next==null){
System.out.println(nx.val);
return;
}else{
System.out.println(nx.val+" ");
nx=nx.next;
}
}
}
=======================================================================================
public static LinkNode getKthFromEnd(LinkNode head, int k) {
LinkNode fast=head;
LinkNode slow=head;
if(k<=0){
return head;
}
int n=k-1; 这是我实现业务的方法,返回了一个slow节点
while(n>0){
fast=fast.next;
n--;
}
while(fast.next!=null){
fast=fast.next;
slow=slow.next;
}
return slow;
}
}
持续更新,未完待续。。。。。。。。。。。。。。。。
|