字串判断、成绩排序

这篇博客探讨了在链表中进行出队操作时队头指针的修改情况,解析了递归函数结束的条件,提出了控制递归结束的多种方式,并介绍了如何高效地判断字符串子串以及对成绩进行排序的问题。内容涵盖了数据结构、算法和编程基础知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值