【面试算法题总结01】输入输出处理基础

系列说明:

【面试算法题总结】系列主要是以各个算法为单元总结常见算法题,主要题源为leetcode的《剑指offer》和《hot100》两个专题。链接如下:
剑指offer和hot100

这里简单说明一下,一道题目可能有多种解法,或者类似题目却有完全不同的解法,我每篇总结的例题并不一定用的都是标题写的算法,而是可能会拓展更多有关解法,以及类似题目。

反正最终目标就是:誓死解决写算法得过且过、缺少训练量的问题。不熟的代码就一遍一遍的写,一遍一遍的理解,直到会写为止。

面试时写算法的一点个人建议:

  1. 高效运行>运行成功>运行失败:想出低效思路后,思考3分钟有没有高效思路,如果没有就先用低效思路写出来,保证先运行成功;想用一些现成的方法简化代码,但方法名实在是想不起来就自己实现一下,保证先运行成功
  2. 变量命名,实在不会对应英文就直接用个字母,犹豫半天写个错误单词更狼狈
  3. 多写注解,即给面试官看,也是给自己看
  4. 要传回去的值再考虑要不要用全局变量吧,其他的就通过参数传递就好
  5. 运行成功之前要自信、自信、再自信。要有 “就这破题还不是小意思” 的自信
  6. 运行成功之后要小心、小心、再小心。要有正确性、健壮性和优化时间、空间的思考
     

 

输入输出处理基础:

并不是所有公司的机试环境都是“核心代码模式”,有些是“ACM模式”,需要自己写输入输出处理。牛客、力扣等编程平台的编码模式也都是根据题库来的,可能是核心代码模式,也可能是ACM模式。这是无法选择的,只能适应。

Scanner类

(1)next() 与 nextLine() 方法获取输入的字符串,读取前一般使用 hasNext 与 hasNextLine 判断是否还有输入的数据
next以空格结束。nextLine以回车结束,使用它时要确定好游标的真正位置,可能要先处理一个多余的回车
(2)如果要输入 int 或 float 类型的数据,输入之前先使用 hasNextXxx() 方法进行验证,再使用 nextXxx() 来读取

 

例题1 特定个数的数字输入

/**数组求和 一直输入
1 5
10 20
6
30* */

import java.util.*;
public class Main{
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    while (sc.hasNext()) {
      int a = sc.nextInt();// long a=sc.nextLong();
      int b = sc.nextInt();// long b=sc.nextLong();
      System.out.println(a + b);
    }
  }
}

 

例题2 不定个数的数字输入

/** 数组求和 直接求 一直输入
1 2 3
4 5
0 0 0 0 0
6
9
0 */
import java.util.*;

class Solution{
    public void f(){
        Scanner sc=new Scanner(System.in);
        while(sc.hasNext()){
            int sum=0;
            String[] temp=sc.nextLine().split(" ");
            //最好用split("\\s+")分割: \\s表示空格,回车,换行等空白符; +号表示一个或多个的意思
            for(int i=0;i<temp.length;++i){
                sum+=Integer.valueOf(temp[i]);
            }
            System.out.println(sum);
        }
    }
}
public class Main{
    public static void main(String[] args){
        new Solution().f();
    }
}

 

例题3 特定个数的字符串输入

/** 给出个数,下例5为个数
 5
 c d a bb e
 5
 c d a bb f
 
 a bb c d e
 a bb c d f*/
import java.util.*;

class Solution{
    public void f(){
        Scanner sc=new Scanner(System.in);
        while(sc.hasNext()){
            int n=sc.nextInt();
            String[] temp=new String[n];
            for(int i=0;i<n;++i){
                temp[i]=sc.next();
            }
            Arrays.sort(temp);
            System.out.println(String.join(" ",temp));
        }
    }
}
public class Main{
    public static void main(String[] args){
        new Solution().f();
    }
}

 

例题4 不定个数的字符串输入

/** 一直输入
 a c bb
 f dddd
 nowcoder
 
 a bb c
 dddd f
 nowcoder*/
import java.util.*;

class Solution{
    public void f(){
        Scanner sc=new Scanner(System.in);
        while(sc.hasNext()){
            String[] temp=sc.nextLine().split(" ");
            Arrays.sort(temp);
            //输出方法1:
            System.out.println(String.join(" ",temp));
            //输出方法2:
            StringBuilder result=new StringBuilder("");
            for(int i=0;i<temp.length;++i){
                result.append(" ");
                result.append(temp[i]);
            }
            System.out.println(result.toString().trim());
        }
    }
}
public class Main{
    public static void main(String[] args){
        new Solution().f();
    }
}

 

IDEA几个非常实用的快捷键:

在类体中输入 psvm(或者main) ,回车:main
在方法体中输入 sout ,回车:输出
在方法体中输入 fori,回车:循环
Ctrl + J:插入代码模板
Ctrl + Alt + L 格式化代码
ctrl+F 在当前文本查找
ctrl + R 在当前文本替换
ctrl + Y 快速删除当前行

你可能感兴趣的:(数据结构与算法,算法,面试,java)