面試 | Java 演算法的 ACM 模式

来源:https://www.cnblogs.com/dlhjw/archive/2022/04/07/16112707.html
-Advertisement-
Play Games

(Java 演算法的 ACM 模式) 前言 經常在 LeetCode 上用核心代碼模式刷題的小伙伴突然用 ACM 模式可能會適應不過來,把時間花在輸入輸出上很浪費時間,因此本篇筆記對 Java 演算法的 ACM 模式做了個小總結; 除此之外,需要註意一些小細節: 1. 數字讀取到字元串讀取間需要用 in ...


目錄


前言

經常在 LeetCode 上用核心代碼模式刷題的小伙伴突然用 ACM 模式可能會適應不過來,把時間花在輸入輸出上很浪費時間,因此本篇筆記對 Java 演算法的 ACM 模式做了個小總結;

除此之外,需要註意一些小細節:

  • 1. 數字讀取到字元串讀取間需要用 in.nextLine() 換行;

1. 數字處理

  • 如果是讀取 Long,則使用:in.hasNextLong()Long a = in.nextLong()
  • 讀取小數:f = scan.nextFloat()double weight = scan.nextDouble()

1.1 多組空格分隔的兩個正整數

輸入包括兩個正整數a,b(1 <= a, b <= 10^9),輸入數據包括多組;

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextInt()) { // 註意 while 處理多個 case
            int a = in.nextInt();
            int b = in.nextInt();
            //處理
        }
    }
}

1.2 第一行組數接空格分隔的兩個正整數

第一行輸入數據個數,後面輸入數據;

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int num = in.nextInt();
        for(int i = 0; i < num; i++) { // 註意 while 處理多個 case
            int a = in.nextInt();
            int b = in.nextInt();
            //處理
        }
    }
}

1.3 空格分隔的兩個正整數為0 0 結束

輸入包括兩個正整數a,b(1 <= a, b <= 10^9), 如果輸入為0 0則結束輸入;

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextInt()) { // 註意 while 處理多個 case
            int a = in.nextInt();
            int b = in.nextInt();
            if(a ==0 && b == 0) break;
            //處理
        }
    }
}

1.4 每行第一個為個數後帶空格分割整數為0結束

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextInt()) { // 註意 while 處理多個 case
            int n = in.nextInt();
            if(n == 0) break;
            int sum = 0;
            for (int i = 0; i < n; i++) {
                sum += in.nextInt();
            }
            System.out.println(sum);
        }
    }
}


2. 字元串處理

比較項 next( ) nextLine( )
說明 只能讀取到空格之前的字元串 可以讀取空格的字元串
比如“你好 java” “你好” “你好 java”
使用前判斷 in.hasNext() in.hasNextLine()

2.1 第一行個數第二行字元串

import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        in.nextLine();
        while (in.hasNext()) { // 註意 while 處理多個 case
            String[] s = in.nextLine().split(" ");
            //處理
        }
    }
}

2.2 多行空格分開的字元串

import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextLine()) { // 註意 while 處理多個 case
            String[] s = in.nextLine().split(" ");
            //處理
        }
    }
}

3. 輸出格式化相關

  • 輸出有兩種方式:String str=String.format(示例)System.out.printf(示例)
  • 向上取整用:Math.ceil(1.01),向下取整用:Math.floor(1.01)

3.1 轉換符

轉換符 說明 示例 輸出
%s 字元串 "Hi,%s:%s.%s", "王南","王力","王張" Hi,王南:王力.王張
%c 字元 "字母a的大寫是:%c %n", 'A' 字母a的大寫是:A
%b 布爾 "3>7的結果是:%b %n", 3>7 3>7的結果是:false
%d 整數(十進位) "100的一半是:%d %n", 100/2 100的一半是:50
%x 整數(十六進位) "100的16進位數是:%x %n", 100 100的16進位數是:64
%o 整數(八進位) "100的8進位數是:%o %n", 100 100的8進位數是:144
%f 浮點 "50元的書打8.5折扣是:%f 元%n", 50*0.85 50元的書打8.5折扣是:42.500000 元
%a 浮點(十六進位) "上麵價格的16進位數是:%a %n", 50*0.85 上麵價格的16進位數是:0x1.54p5
%e 指數 "上麵價格的指數表示:%e %n", 50*0.85 上麵價格的指數表示:4.250000e+01
%g 通用浮點(f和e類型中較短的) "上麵價格的指數和浮點數結果的長度較短的是:%g %n", 50*0.85 上麵價格的指數和浮點數結果的長度較短的是:42.5000
%h 散列碼 "字母A的散列碼是:%h %n", 'A' 字母A的散列碼是:41
%% 百分比 "上面的折扣是%d%% %n", 85 上面的折扣是85%
%n 換行符
%tx 日期與時間

3.2 搭配轉換符的標誌

標誌 說明 示例 輸出
. 後接保留多少位小數(四捨五入) ("%.2f",3.555) 3.56
+ 為正數或者負數添加符號 ("%+d",15) +15
左對齊 ("%-5d",15) |15 |
0 數字前面補0 ("%04d", 99) 0099
空格 在整數之前添加指定數量的空格 ("% 4d", 99) | 99|
, 以“,”對數字分組 ("%,f", 9999.99) 9,999.990000
( 使用括弧包含負數 ("%(f", -99.99) (99.990000)
# 如果是浮點數則包含小數點,如果是16進位或8進位則添加0x或0 ("%#x", 99) ("%#o", 99) 0x63 0143
< 格式化前一個轉換符所描述的參數 ("%f和<3.2f", 99.45) 99.450000和99.45
$ 被格式化的參數索引 ("%1$d,%2$s", 99,"abc") 99,abc

4. ACM 模式模板

public class Main {

    public static void main(String[] args) {
        //1.數據輸入
        Scanner in = new Scanner(System.in);
        //讀數字
        int numLen = in.nextInt();
        int[] numArr = new int[numLen];
        int i = 0;
        while(in.hasNextInt() && i < numLen){
            numArr[i] = in.nextInt();
            i++;
        }
        //讀字元串
        int strLen = in.nextInt();
        in.nextLine(); //數字到字元串要換行
        String[] strArr = new String[strLen];
        //或者 strArr[] = in.nextLine().split(" ");
        int j = 0;
        while(in.hasNextLine() && j < strLen){
            strArr[j] = in.nextLine();
            j++;
        }
        
        //2. 處理
        Solution solution = new Solution();
        String result = solution.process(numArr, strArr);
        
        //3. 輸出
        System.out.println(result);
        //四捨五入輸出小數
        String str = String.format("%.2f",3.555);
        System.out.println(str);
    }
}

//下麵類似 LeetCode 的核心代碼模式
class Solution {
    public String process(int[] nums, String[] strs) {
        StringBuilder sb = new StringBuilder();
        sb.append(Arrays.toString(nums));
        sb.append(" && ");
        sb.append(Arrays.toString(strs));
        return sb.toString();
    }
}

最後

新人製作,如有錯誤,歡迎指出,感激不盡!
歡迎關註公眾號,會分享一些更日常的東西!
如需轉載,請標註出處!

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 由於``某些不可抗力原因,公司不允許使用itext系列的jar包,因此系統中使用的相關jar得替換成開源的。經比較和嘗試考慮使用org.apache.pdfbox來替換,同時修改系統中原有的方法,發現比itext系列稍顯簡潔一點,記錄如下: 加密文件 /** * 加密文件測試 * @date 202 ...
  • 背景 在項目使用了Spring Security之後,很多介面無法訪問了,從瀏覽器的網路調試窗看到的是CORS的報錯和403的報錯 分析 我們先來看一下CORS是什麼,和它很相似的CSRF是什麼,在SpringSecurity中如何配置以及起的什麼作用 CORS(Cross Origin Resou ...
  • 本文我們來看下 SpringSecurity + JWT 實現單點登錄操作,本文 2W 字,預計閱讀時間 30 min,文章提供了代碼骨架,建議收藏。 一、什麼是單點登陸 單點登錄(Single Sign On),簡稱為 SSO,是目前比較流行的企業業務整合的解決方案之一。SSO的定義是在多個應用系 ...
  • 一、字元流的由來 由於使用位元組流操控中文時不是很方便,Java就提供了字元流來進行操控中文 實現原理:位元組流+編碼表 為什麼用位元組流進行複製帶有中文的文本文件時沒有問題? 因為底層操作會自動進行位元組拼接成中文 怎樣識別該位元組是中文呢? 漢字在存儲時,無論是UTF-8還是GBK,第一個位元組都是負數用來 ...
  • 《零基礎學Java》 文件輸入/輸出流 程式運行期間,大部分數據都被存儲在記憶體中,當程式結束或被關閉時,存儲在記憶體中的數據將會消失。如果要永久保存數據,那麼最好的辦法就是把數據保存到磁碟的文件中。為此,Java提供了文件輸入/輸出流,即 FilelnputStream類 與 FilcOutputSr ...
  • 之前刷到一個視頻,老師上課點到用系統點到回答問題,然後就點名結束了。相信很多學校現在也會玩這招吧,今天就用Python給大家做一個點名系統。來吧,展示… 一.準備工作 1.Tkinter Tkinter 是 python 內置的 TK GUI 工具集。TK 是 Tcl 語言的原生 GUI 庫。作為 ...
  • SpringCloud Function SpEL註入 漏洞分析 ...
  • 前言大家拍照的時候會用到全景嗎?在拍一個環境的時候還是會有很多人用全景的吧 ,今天教大家如何用Python拼接全景圖片。 圖像的全景拼接,即“縫合”兩張具有重疊區域的圖來創建一張全景圖。其中用到了電腦視覺和圖像處理技術有:關鍵點特征檢 測、局部不變特征、關鍵特征點匹配、RANSAC(Random ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...