美文网首页
2022-04-18

2022-04-18

作者: 滔滔逐浪 | 来源:发表于2022-04-18 16:54 被阅读0次

    请实现以下算法,语言不限,也可以是伪代码。

    1.有一个数组 a[1000]存放了1000 个整数,这 1000个数都大于等于1,小于等于999, 并且只有两个数是相同的(假设该数为a),
    剩下的 998个数均不相同。请写一个最优搜索算法,找出a,并给出该算法的时间复杂度。

    
    /**
     * @author wangjin
     * @title: SearchNumber
     * @projectName
     * @description: 时间复杂度为O()=O(logn)
     * @date 2022/4/18 0018 16:33
     */
    public class SearchNumber {
    
        //被搜索数据的大小
        private  static  final int size=1000;
    
        public static void main(String[] args) {
            //添加测试数据
            int[] data=new int[size];
            for (int i = 0; i <data.length ; i++) {
                data[i]=i+1;
            }
            data[999]=62;
            result(data);
        }
    
        public static void result(int data[]){
            //排序
            Arrays.sort(data);
            for (int i=0;i<data.length;i++){
                int target =data[i];
                data[i]=0;
                int result =binaryFind(data,target);
                if(result !=-1){
                    System.out.println("相同元素为:"+data[result]);
                    break;
                }
            }
        }
     /**
      * @Author wangjin
      * @Description //二分搜索算法实现
      * @Date 2022/4/18 0018
      * @Param [data, target] 数据集合,搜索的数据
      * @return int 返回找到的数据的位置,返回-1表示没有找到
      **/
        public static int binaryFind(int[] data, int target) {
            int satrt =0;
            int end=data.length-1;
            while (satrt <=end){
                int middle=(satrt+end) /2;
                if(target ==data[middle]){
                    return middle;
                }
                if(target >=data[middle]){
                    satrt =middle+1;
                }else{
                    end=middle-1;
                }
            }
    
            return -1;
    
        }
    }
    
    
    

    2.给出任意正整数X(X 小于 2的31次幂), 求不比X小且是2的整数次幂中最小的值Y。例如X=7,则Y为8;X=8,则Y为8。

    package com.taotao.wifepojie.test;
    
    import java.math.BigInteger;
    
    /**
     * @author wangjin
     * @title: Exponentiation
     * @projectName wife-pojie
     * @description: TODO
     * @date 2022/4/18 0018 17:37
     */
    public class Exponentiation {
        public static void main(String[] args) {
            //X 小于 2的31次幂
            int X=7;
            BigInteger pow = BigInteger.valueOf(2).pow(31);
            BigInteger bigInteger = BigInteger.valueOf(Integer.valueOf(X));
               if(bigInteger.compareTo(pow)==-1){
                   System.out.println(highestOneBit(X));
               }
    
        }
        public static int highestOneBit(int i) {
    
            // HD, Figure 3-1
            i |= (i >>  1);
            i |= (i >>  2);
            i |= (i >>  4);
            i |= (i >>  8);
            i |= (i >> 16);
            int j= i - (i >>> 1);
            return j*2;
        }
    }
    
    

    3.现有一个数据文件data.csv,里面有1000万条时序数据(按时间升序),共两列,第1列为时间(日期时间类型,到秒),
    第2列为值(单精度类型)。请输出每分钟的平均值。
    数据格式如下:

    2017\8\6 5:13:55,802.43
    2017\8\6 5:13:56,803.537
    2017\8\6 5:13:58,803.638
    2017\8\6 5:14:00,803.238
    2017\8\6 5:14:01,803.142
    2017\8\6 5:14:02,803.1453
    2017\8\6 5:14:03,803.1486
    2017\8\6 5:14:04,803.152
    2017\8\6 5:14:05,803.1553
    2017\8\6 5:14:06,803.1586
    2017\8\6 5:14:17,803.1619
    2017\8\6 5:14:18,803.1652
    
    select minute_time 时间,avg(data) 平均值
    from 
     (select 
     substring(time,1,16)as minute_time ,
      data 
      from test2 ) tmp
    group by minute_time
    
    

    结果截图:


    image.png

    4.请写一个程序,输出2的10000次方的值。
    方法1:

    package com.taotao.wifepojie.test;
    
    import org.springframework.util.CollectionUtils;
    
    import java.util.LinkedList;
    import java.util.List;
    
    public class CalculateTheSquare {
    
        /**
         * 用数组计算2^10000
         * @param args 计算平方
         *             
         */
        public static void main(String[] args) {
            //数组存储每一位的数字
            List<Integer> num= new LinkedList<>();
            for(int i=1;i<=10000;i++){
                if(CollectionUtils.isEmpty(num)){
                    num.add(2);//设置初始值
                }else {
                    int inc=0;//进位数,初始为0
                    for(int j=0;j<num.size();j++){
                        int multi= num.get(j)*2;//对应位数上乘以2
                        int forward=(multi+inc)/10;//获取下次进位数
                        int data=(multi+inc)%10;//进位数和结果相加,获取个位数
                        num.set(j,data);//替换原来对应位置上的数字
                        inc=forward;
                    }
                    //如果进位数大于零,那么进位数需要加入链表,进行下次计算
                    if(inc>0){
                        num.add(inc);
                    }
                }
            }
    
            /**
             * 打印结果
             */
            for(int k=num.size()-1;k>=0;k--){
                System.out.print(num.get(k));
                if(k==0){
                    System.out.println("\n");
                }
            }
        }
    
    }
    

    方法2:

    package com.taotao.wifepojie.test;
    
    import java.math.BigInteger;
    
    /**
     * @author wangjin
     * @title: CalculateTheSquare1
     * @projectName wife-pojie
     * @description: TODO
     * @date 2022/4/18 0018 17:22
     */
    public class CalculateTheSquare1 {
        public static void main(String[] args) {
            //计算2^10000
            BigInteger pow = BigInteger.valueOf(2).pow(10000);
            System.out.println(pow);
        }
    }
    
    

    输出结果:

    
    19950631168807583848837421626835850838234968318861924548520089498529438830221946631919961684036194597899331129423209124271556491349413781117593785932096323957855730046793794526765246551266059895520550086918193311542508608460618104685509074866089624888090489894838009253941633257850621568309473902556912388065225096643874441046759871626985453222868538161694315775629640762836880760732228535091641476183956381458969463899410840960536267821064621427333394036525565649530603142680234969400335934316651459297773279665775606172582031407994198179607378245683762280037302885487251900834464581454650557929601414833921615734588139257095379769119277800826957735674444123062018757836325502728323789270710373802866393031428133241401624195671690574061419654342324638801248856147305207431992259611796250130992860241708340807605932320161268492288496255841312844061536738951487114256315111089745514203313820202931640957596464756010405845841566072044962867016515061920631004186422275908670900574606417856951911456055068251250406007519842261898059237118054444788072906395242548339221982707404473162376760846613033778706039803413197133493654622700563169937455508241780972810983291314403571877524768509857276937926433221599399876886660808368837838027643282775172273657572744784112294389733810861607423253291974813120197604178281965697475898164531258434135959862784130128185406283476649088690521047580882615823961985770122407044330583075869039319604603404973156583208672105913300903752823415539745394397715257455290510212310947321610753474825740775273986348298498340756937955646638621874569499279016572103701364433135817214311791398222983845847334440270964182851005072927748364550578634501100852987812389473928699540834346158807043959118985815145779177143619698728131459483783202081474982171858011389071228250905826817436220577475921417653715687725614904582904992461028630081535583308130101987675856234343538955409175623400844887526162643568648833519463720377293240094456246923254350400678027273837755376406726898636241037491410966718557050759098100246789880178271925953381282421954028302759408448955014676668389697996886241636313376393903373455801407636741877711055384225739499110186468219696581651485130494222369947714763069155468217682876200362777257723781365331611196811280792669481887201298643660768551639860534602297871557517947385246369446923087894265948217008051120322365496288169035739121368338393591756418733850510970271613915439590991598154654417336311656936031122249937969999226781732358023111862644575299135758175008199839236284615249881088960232244362173771618086357015468484058622329792853875623486556440536962622018963571028812361567512543338303270029097668650568557157505516727518899194129711337690149916181315171544007728650573189557450920330185304847113818315407324053319038462084036421763703911550639789000742853672196280903477974533320468368795868580237952218629120080742819551317948157624448298518461509704888027274721574688131594750409732115080498190455803416826949787141316063210686391511681774304792596709376
    
    

    相关文章

      网友评论

          本文标题:2022-04-18

          本文链接:https://www.haomeiwen.com/subject/tsbdertx.html