首页| 新闻| 娱乐| 游戏| 科普| 文学| 编程| 系统| 数据库| 建站| 学院| 产品| 网管| 维修| 办公| 热点
给定非负整数num,求在区间[0,num]内所有整数的二进制串中1的位数,并把结果以数组形式表示。 示例:如num=5,则应返回[0,1,1,2,1,2]。 要求:时间复杂度与控件复杂度均应为O(n)。
由题目中所给出的要求可知,不能使用普通思路,即对[0...num]中所有的数字单独求其二进制串中1的位数,而应寻找其前后之间的规律,即递归思路,降低算法复杂度。
仔细观察上表可以发现,整数n的二进制串中1的位数f(n)与将其二进制串最高位去掉后数字m的f(m)之间存在如下递归关系: f(n)=1+f(m) 其中,m=(n<<1)&1...1(1的个数为n二进制串的长度)。
本题中最重要的是能够发现数字二进制串中1位数之间的规律,之后使用递归思路进行解题。 在递归编程中,应仔细分析递归基与递归步,确保每一步均可减小问题规模,并且最终使用递归基进行解决。
索泰发布一款GTX 1070 Mini迷
AMD新旗舰显卡轻松干翻NVIDIA
索泰发布一款GTX 1070 Mini迷你版本:小机
芭蕾舞蹈表演,真实美到极致
下午茶时间,悠然自得的休憩
充斥这繁华奢靡气息的城市迪拜风景图片
从山间到田野再到大海美丽的自然风景图片
肉食主义者的最爱美食烤肉图片
夏日甜心草莓美食图片
人逢知己千杯少,喝酒搞笑图集
搞笑试卷,学生恶搞答题
新闻热点
疑难解答
图片精选
Dictionary数据类型在Darwin视频服
可穿戴手势识别控制器
网友关注