• 小红书和中兴笔试


    题目一

    1)题目表述:一伙人在户外玩耍,在户外围城一个圈,最开始是随机坐的,当游戏开始时需要男生与男生挨着坐,女生与女生挨着坐,问需要移动几次能够达到目的(可以任意两个人相互移动算一次)
    2)输入输出
    输入:10001001(说明:其中第一个人和最后一个人是挨着的)
    输出:1次
    3)难点讲解:
    (1)首先数输入部分,未知有多少个,故使用cin.nextLine()整行进行接收,然后分为String数组,之后再转换类型变为整形存入集合中去。
    (2)就是逻辑的推倒部分,其实只是需要两次遍历就好了。

    package A_inPut_outPut;
    
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    import java.util.Scanner;
    
    public class demo5 {
        public static void main(String[] args) {
            //昨天的题目,给一个数组:判断移动几次使得男男女女坐在一起
            //1001010: 1次
            //110101001:1次
            //1010100101: 2次
            //1010010101: 2次
    
            //1)输入
            Scanner cin=new Scanner(System.in);
            String string=cin.nextLine();
            String[] arrstring=string.split("");
            System.out.println(Arrays.toString(arrstring));
            List<Integer> list=new ArrayList<>();
            for(int i=0;i<arrstring.length;i++){
                list.add(Integer.valueOf(arrstring[i]));
            }
            System.out.println("list="+list);
            //2)统计1的个数
            int num=list.size();
            System.out.println("num="+num);
            int num1=0;
            for(int i=0;i<list.size();i++){
                if(list.get(i)==1) num1++;
            }
            System.out.println("num1="+num1);
            //2)构造新的list,两个叠加在一起
            List<Integer> newlist=new ArrayList<>(list);
            for(int i=0;i<list.size();i++){
                newlist.add(list.get(i));
            }
            System.out.println("newlist="+newlist);
    
            //3)遍历逻辑
            int max=0;
            for(int i=0;i<num;i++){
                int temp=0;
                for(int j=i;j<i+num1;j++){
                    if(newlist.get(j)==1) temp++;
                }
                System.out.println("temp="+max);
                max=temp>max?temp:max;
    
                System.out.println("max="+max);
            }
    
            //4)结果
            System.out.println("result="+(num1-max));
    
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59

    题目二

    1. 查找数组中一个非成对的数字
      1)题目描述:有一群数字,大部分都是两两配对,找出不配对的那一个数子。
      2)输入输出
      输入:1 2 3 1 2
      输出:3
      3)思路:使用异或操作(遍历异或)
    2. 查找数组中两个非成对的数字
      假设要找出数组arr[]={2,2,3,3,5,6}中不成对出现的两个数,既5和6
      如果可以把5和6分别到两组里,然后将这两组的数异或在一起,就可以得到这两个数了
      首先将数组的所有值异或在一起的到5和6异或的结果,既22335^6=3
      然后找到3二进制位任意一个为1的位置,因为异或的性质是相异为1,那么如果按照这个二进制位对数组进行分组,那么5和6必然被分开了
      3的二进制中第一位就是1,那么我们按这位进行分组。第一位二进制位位0:{2,2,6};第一位二进制位位1:{3,3,5}
      最后将这两组数分别异或并输出就可以得到结果了

    参考文献
    原文链接:https://blog.csdn.net/hansionz/article/details/80871967

  • 相关阅读:
    4、SpringBoot_Mybatis、Druid、Juint整合
    10 第 K 个最小的素数分数----来源于陈C同学(CC)
    【47C++STL-常用算法----5、常用算术生成算法
    【CSS】头部尾部固定中间滚动
    CUDA By Example(二)——CUDA C简介
    Error running ‘xxx‘: Command line is too long. Shorten command line for xxxx
    node微信小程序登录实现登录
    【网格黑科技】扒一扒你所不知道的Cast-Designer网格黑科技
    岛屿数量 -- 二维矩阵的dfs算法
    FoveaBox:细节差别,另一种DenseBox+FPN的Anchor-free方案 | IEEE TIP 2020
  • 原文地址:https://blog.csdn.net/qq_42974034/article/details/126612986