• 11.25总结


    目录

    一.做题总结

    1.约瑟夫问题

    2.最近请求次数

    4.选择题订正

    二.最长字符串

    三.最长数组问题


    一.做题总结

    1.约瑟夫问题

    我的思路就是先遍历按队员编号添加按顺序初始化每个人的编号.

    就建立循环,终止条件就是大小为1

    进入每次叫号的循环.让编号不为1的全部移出去

    因为题目要求上次叫的从第二次循环的额开始,所以就把最后一个移到前面来

    这道题不做不知道一做吓一跳

    首先我刚开始用的接口是Queue的.然后发现removeLast根本没有

    然后我就改成双向队列.deque的接口就发现一直进入死循环

    想来想去可能就是在remove函数出现问题

    去idea查了下deque底层方法.就发现根本没有这个方法

    他只会默认删除第一个.是不带参数的

    所以我们只能用LinkedList自己来引用对象

    1. import java.util.*;
    2. public class Joseph {
    3. public int getResult(int n) {
    4. // write code here
    5. Deque queue = new LinkedList<>();
    6. int count = 2;
    7. int i = 1;
    8. while (i <= n) {
    9. queue.add(i);
    10. i++;
    11. }//初始化完成
    12. while (queue.size() != 1) {
    13. int cur = 0;
    14. i = 0;
    15. while (queue.size() > 1 && i < queue.size()) {
    16. cur = (cur + 1) % count;
    17. if (cur != 1) {
    18. queue.remove(i);
    19. } else {
    20. i++;
    21. }
    22. }
    23. count++;
    24. int ret = queue.removeLast();
    25. queue.addFirst(ret);
    26. }
    27. return queue.pop();
    28. }
    29. }

    2.最近请求次数

    其实这道题并不是很难.我刚开始想到用队列来做,然后一直无法编译通过

    逻辑也没错.我检查了一下错误用用例发现了数据特别大,

    我检查了一下,发现很有可能是

    因为这个数据是往后递增的,所以只要找到小于n的,就不需要往后再找了

    但是我还一直往后加,找,所以我就改了一下,只要找到就跳出循环

    官方解答用的是单项向队列,直接弹出

    感觉更简单一些

    4.选择题订正

    子类继承父类,需要先帮助父类构造方法,此题没有写,代表就是默认的

    但是这里的name是private修饰的,只能在类内进行访问

    子类帮助父类构造,要在构造方法写上super();

    catch是不能省略的

    面向对象的三大特性包括:封装,继承,多态

    SQL语言又称为结构化查询语言

    A选项,不能直接调用,要用super,方法

    B选项类方法就是静态方法,不能直接调用,要用类名调用.除非是本类调用

    二.最长字符串

    1. import java.util.*;
    2. public class Main {
    3. public static void main(String[] args) {
    4. Scanner sc=new Scanner(System.in);
    5. String str=sc.nextLine();
    6. char[] arr=str.toCharArray();
    7. String cur="";
    8. String q="";
    9. for (int i = 0; i < arr.length; i++) {
    10. if(arr[i]>='0'&&arr[i]<='9'){
    11. StringBuilder sb=new StringBuilder();
    12. while(i < arr.length&&arr[i]>='0'&&arr[i]<='9'){
    13. sb.append(arr[i]);
    14. i++;
    15. }
    16. cur=sb.toString();
    17. if(cur.length()>q.length()){
    18. q=cur;
    19. }
    20. }
    21. }
    22. System.out.println(q);
    23. }
    24. }

    其他的做法

    字符串不能直接拼接字符,

    加个双引号

    就直接改变引用指向的对象

    1. import java.util.*;
    2. public class Main {
    3. public static void main(String[] args) {
    4. Scanner sc=new Scanner(System.in);
    5. String str=sc.nextLine();
    6. // char[] arr=str.toCharArray();
    7. String cur="";
    8. String q="";
    9. for (int i = 0; i < str.length(); i++) {
    10. char ch=str.charAt(i);
    11. if(ch>='0'&&ch<='9'){
    12. cur=cur+ch+"";
    13. }else{
    14. if(cur.length()>q.length()){
    15. q=cur;
    16. }
    17. cur="";
    18. }
    19. }
    20. if(cur.length()>q.length()){
    21. q=cur;
    22. }
    23. System.out.println(q);
    24. }
    25. }

    三.最长数组问题

    我先想到就是暴力解法,遍历每个数组元素,然后让他遍历往后的每一个

    只要有相同的就++.只要超过数组长度一半就返回

    但是最后一组测试用例出现了问题

    应该是有好几个都超过了数组长度,但是需要找最长的那一个

    所以我定义两个变量,记录每次超过数组长度的元素的次数和大小,

    如果下次还超过 就替换

    最后返回11.25

    1. import java.util.*;
    2. public class Solution {
    3. public int MoreThanHalfNum_Solution (int[] numbers) {
    4. // write code here
    5. int n=numbers.length;
    6. if(n==1){
    7. return numbers[0];
    8. }
    9. int x=0;int y=0;
    10. for (int i = 0 ; i < n; i++) {
    11. int j = numbers[i];
    12. int a = 1;
    13. for (int t = i + 1; t < n; t++) {
    14. if ( j == numbers[t]) {
    15. a++;
    16. }
    17. if (a >= n/2) {
    18. if(a>x){
    19. x=a;y=j;
    20. }
    21. }
    22. }
    23. }
    24. return y;
    25. }
    26. }

  • 相关阅读:
    第3章 处理机调度与死锁
    华为数通方向HCIP-DataCom H12-831题库(多选题:1-20)
    内存 地址转换、分段、空闲空间管理
    动态主机配置协议(DHCP)解密:网络自动化与管理的关键
    剑指offer.平衡二叉树
    LeetCode 每日一题 2022/10/17-2022/10/23
    PreScan快速入门到精通第三十一讲基于PreScan进行鱼眼摄像头传感器仿真
    三:MySQL数据库管理事务、存储引擎(2)
    牛客练习赛#84 F 莫比乌斯反演+杜教筛+技巧+斐波那契数列和gcd的结论+矩阵快速幂
    一、什么是JAVA
  • 原文地址:https://blog.csdn.net/m0_72618437/article/details/128046459