zoukankan      html  css  js  c++  java
  • 九章算法刷题总结

    1、实现一个memcpy函数:memcpy(void *p, void *q, unsigned len);

       思路:1、注意p、q是否为NULL

          2、内存重叠的情况

          3、每次copy字节数:32系统可以选择4字节如int,64系统可以选择8字节如long long

     2、STL中vector的实现原理

        vector本质其实就是一个动态内存分配的数组,内存分配策略(元素个数):

          0->1->2->4->8->16->...

        相关方法:可以通过capacity函数获取当前可以容纳的元素个数

             通过shrink_to_fit函数可以紧缩内存,把多余的空闲内存收回(C++11支持)

     3、给定N张扑克牌和一个随机函数,设计一个洗牌算法

      问题转化:相当于设计一个函数可以随机1~54中的所有数,每个数仅出现一次且概率相等

      思路:1、开一个大小为len的数组ary,数组的元素值与下标相同

         2、index = random(0, len - 1),本次随机到的值是ary[index];

           3、交换ary[index] 与 ary[len - 1]的值, 然后len--

         4、进入下次随机

     4、25匹马,5个跑道,每个跑道最多能有5匹马进行比赛,最少比多少次能比出前3名?前5名?

      思路:1、首先将25匹马分为5组,每次进行一次比赛

         2、把每组的第一名拿出来进行一次比赛(决出第一名)

         3、第一名所在组:取出其第2、3名

            第二名所在组:取出其第1、2名

            第三名所在组:取出其第1名

            进行一次比赛,其中的第1、2名分别为第二名和第3名

          总共7次(5名的大家推一下就OK)

    5、100亿个整数,内存足够,如何找到中位数?内存不足,如何找到中位数?

      思路:内存足够的情况下:

           快速排序算法或者二分法统计都可以

         内存不足的情况下:

           1、二分法(对于32的int最多32次)就行了

           2、hash分到小文件中:hash函数(可以取32位中的前10作为hash值)划分成1024个文件

              统计之后如果内存足够了可以直接采用快速排序,否则继续划分小文件

  • 相关阅读:
    salesforce
    InitializingBean afterPropertiesSet
    Springfox Reference Documentation
    说说 PWA 和微信小程序--Progressive Web App
    Spring Security HTTP Basic for RESTFul and FormLogin (Cookies) for web
    分布式环境下限流方案的实现redis RateLimiter Guava,Token Bucket, Leaky Bucket
    Android高德地图自定义Markers的例子
    JAVA字符串转日期或日期转字符串
    JSON封装与解析
    Android得到控件在屏幕中的坐标
  • 原文地址:https://www.cnblogs.com/txlstars/p/5841534.html
Copyright © 2011-2022 走看看