字串判斷、成績排序

1.用不帶頭結點的單鏈表存儲隊列,其隊頭指針指向隊頭結點,隊尾指針指向隊尾結點,則在進行出隊操作時©
A.僅修改隊頭指針
B.僅修改隊尾指針
C.隊頭、隊尾指針都可能要修改
D.隊頭、隊尾指針都要修改
2.遞歸函數最終會結束,那麼這個函數一定?(B)
A.使用了局部變量
B.有一個分支不調用自身
C.使用了全局變量或者使用了一個或多個參數
D.沒有循環調用
解析:
直接排除AD,注意力集中在B和C。 B肯定是對的,只有一次循環滿足某個條件,不調用自己就返回,遞歸纔會一層一層向上返回。 那麼C呢,全局變量和參數確實可以用來控制遞歸的結束與否。 該不該選C呢?再仔細看一下題目(說實話,我很討厭這種文字遊戲),“這個函數一定…“,所以,問題集中在,是否是一定會使用這兩種方式呢? 顯然不是的。 除了C中提到的兩種情況外,還有如下控制遞歸的方式: 1.局部靜態變量是可以控制遞歸函數最終結束的 2.可能通過異常來控制遞歸的結束。 3.可以利用BIOS或OS的一些數據或一些標準庫的全局值來控制遞歸過程的終止。 4.可以把一些數據寫入到BIOS或OS的系統數據區,也可以把數據寫入到一個文件中,以此來控制遞歸函數的終止。 所以,答案爲B
3.標題:子串判斷
現有一個小寫英文字母組成的字符串s和一個包含較短小寫英文字符串的數組p,請設計
一個高效算法,對於p中的每一個較短字符串,判斷其是否爲s的子串。給定一個string數組p和它的大小n,同時給定string s,爲母串,請返回一個bool數組,每個元素代表p中的對應字符串是否爲s的子串。保證p中的串長度小於等於8,且p中的串的個數小於等於500,同時保證s的長度小於等於1000。
測試樣例:
[“a”,“b”,“c”,“d”],4,“abc”
返回:[true,true,true,false]

import java.util.*;
public class Substr {
    public boolean[] chkSubStr(String[] p, int n, String s) {
        // write code here
        int index = 0;
        boolean[] result = new boolean[n];
        List<String> list = new ArrayList<>();
        while(index<s.length()){
            for(int i = index+1;i<=s.length();i++){
                String m = s.substring(index,i);
                list.add(m);
            }
            index++;
        }
        for(int i = 0;i<n;i++){
            if(list.contains(p[i])){
                result[i]=true;
            }else{
                result[i]=false;
            }
        }
        return result;
    }
}
//方法二:
import java.util.*;
public class Main{
    public boolean[] chkSubStr(String[] p, int n, String s) {
        // 創建boolean數組
        boolean[]hasSub=new boolean[p.length];
        //遍歷數組 使用集合中特有功能
        for (int i = 0; i < p.length; i++) { 
            hasSub[i]=s.contains(p[i]); 
        }
        return hasSub; 
    }
}

4.標題:成績排序
查找和排序題目:輸入任意(用戶,成績)序列,可以獲得成績從高到低或從低到高的排列,相同成績
都按先錄入排列在前的規則處理。
例示:
jack 70
peter 96
Tom 70
smith 67
從高到低 成績
peter 96
jack 70
Tom 70
smith 67
從低到高
smith 67
Tom 70
jack 70
peter 96
輸入描述:
輸入多行,先輸入要排序的人的個數,然後分別輸入他們的名字和成績,以一個空格隔開
輸出描述:
按照指定方式輸出名字和成績,名字和成績之間以一個空格隔開
示例1:
輸入
3
0
fang 90
yang 50
ning 70
輸出
fang 90
ning 70
yang 50

import java.util.*;
public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()){
            int number = sc.nextInt();
            int flag = sc.nextInt();
            List<Integer> list = new ArrayList<>();
            LinkedHashMap<String, Integer> map = new LinkedHashMap<>();
            for (int i = 0; i < number; i++) {
                String name = sc.next();
                int score = sc.nextInt();
                list.add(score);
                map.put(name + " " + score, score);
            }
            Collections.sort(list);
            if (flag == 0){
                Collections.reverse(list);
            }
            int pre = -1;
            for (int i : list) {
                if (pre == i)
                    continue;
                for (String key : map.keySet())
                    if (map.get(key).equals(i))
                        System.out.println(key);
                pre = i;
            }
        }
    }
}
//方法二:
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            //輸入人數
            int numPeople = scanner.nextInt();
            //排序策略
            int option = scanner.nextInt();
            //輸入人員的姓名和成績
            List<Student> stuList = new ArrayList<>();
            for (int i = 0; i < numPeople; i++) {
                stuList.add(new Student(scanner.next(), scanner.nextInt()));
            }
            //降序
            if (option == 0) {
                stuList.sort((o1, o2) -> o2.score - o1.score);
            } else if (option == 1)
            //升序
            {
                stuList.sort((o1, o2) -> o1.score - o2.score);
            }
            for (Student student : stuList) {
                System.out.println(student.name + " " + student.score);
            }
        }
    }
}
class Student {
    public String name;
    public int score;
    public Student(String name, int score) {
        this.name = name;
        this.score = score;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章