Fantasy-JXF
  • Introduction
  • 机器学习
    • 机器学习基础
    • 机器学习实践
    • 机器学习算法
    • 集成学习
  • 深度学习
    • 深度学习基础
    • 深度学习实践
    • CNN
    • RNN
    • 优化算法
    • 序列建模
    • 《深度学习》整理
    • 术语表
  • 自然语言处理
    • NLP发展趋势
    • 自然语言处理基础
    • 句嵌入
    • 词向量
    • 多模态
    • 视觉问答(VQA)综述
    • 深度查询理解
      • 综述
  • 计算机视觉
    • 基本模型
  • 数学
    • 概率论
    • 微积分的本质
    • 深度学习的核心
  • 算法
    • 字符串
    • 数据结构
    • 数据结构Advanced
    • 双指针
    • 动态规划
    • 区间问题
    • 排列组合
    • 数学问题
    • 洗牌/采样/随机数
    • 大数运算
    • 海量数据处理
    • IO模板
    • 必备算法
    • LeetCode
    • 剑指Offer
    • 面试真题
  • 编程
    • C++基础
    • C++面向对象
    • C++左值与右值
    • Python基础
  • 笔试面经
    • 360
    • iHandy
    • 作业帮
    • 字节跳动
    • 小米
    • 度小满
    • 快手
    • 招行
    • 搜狐畅游
    • 滴滴
    • 爱奇艺
    • 百度
    • 百度2
    • 百度3
    • 百词斩
    • 腾讯
    • 迅雷
    • 顺丰
    • 旷视
    • 爱笔
    • 魔门塔
    • 搜狐
由 GitBook 提供支持
在本页
  • 笔试-快手-180910
  • Index
  • print(new_ns) # [6, -2, 3, -10, 3]
  • 去掉首尾的负数块
  • print(new_ns) # [6, -2, 3, -10, 3]
  • 按奇偶划分奇数和偶数块
  • print(cnt_pos) # 3
  • print(ns_pos) # [6, 3, 3]
  • print(ns_neg) # [-2, -10]
  • 如果 M 的值小于正数块的数量则进行合并

这有帮助吗?

  1. 笔试面经

快手

上一页度小满下一页招行

最后更新于6年前

这有帮助吗?

笔试-快手-180910

  • 单选 20;编程 3

Index

字符串归一化

Python(AC)

from collections import Counter

s = input()
c = Counter(s)

res = ""
for key in sorted(c.keys()):
    res += key
    res += str(c[key])

print(res)

魔法深渊

Python(AC)

def foo(n):
    dp = [0] * (n + 1)
    dp[0] = 1

    for i in range(1, n + 1):
        j = 1
        while j <= n:
            if i < j:
                break
            dp[i] = dp[i] + dp[i - j]
            j = j * 2
    return dp[n] % 1000000003


N = int(input())
for i in range(N):
    n = int(input())
    print(foo(n))

善变的同伴

思路

作者:n不正
链接:https://www.nowcoder.com/discuss/106768
来源:牛客网

1、先把整个数组改成正负交错的数组,去掉首尾的负数(相邻的正数合并成一个正数,负数合并成一个负数) 
2、如果正数个数<=M,输出所有的正数之和
3、如果正数个数>M,将数组中[正负正]合并,该负数为数组中负数的最大值并且三者之和>三者最大值
4、直到3不满足或者正数个数<=M,输出最大的M个正数之和

Python(未测试)

  • 按照上述思路实现的代码

    ```

    N, M = list(map(int, input().split()))

    ns = list(map(int, input().split()))

    N, M = 7, 3

    ns = [1, 2, 3, -2, 3, -10, 3]

new_ns = [ns[0]]

for i in ns[1:]: if i == 0: continue if (new_ns[-1] > 0) == (i > 0): new_ns[-1] += i else: new_ns.append(i)

print(new_ns) # [6, -2, 3, -10, 3]

去掉首尾的负数块

if len(new_ns) >= 1 and new_ns[0] < 0: new_ns.pop(0)

if len(new_ns) >= 1 and new_ns[-1] < 0: new_ns.pop(-1)

print(new_ns) # [6, -2, 3, -10, 3]

按奇偶划分奇数和偶数块

ns_pos = new_ns[0::2] ns_neg = new_ns[1::2] cnt_pos = len(ns_pos)

print(cnt_pos) # 3

print(ns_pos) # [6, 3, 3]

print(ns_neg) # [-2, -10]

如果 M 的值小于正数块的数量则进行合并

updated = True while updated and M < cnt_pos: """""" updated = False

mx_i = 0
# mx = max(ns_pos[mx_i] + ns_pos[mx_i+1] + ns_neg[mx_i], ns_pos[mx_i], ns_pos[mx_i])
mx = float("-inf")
for i in range(len(ns_neg)):
    tmp = ns_pos[i] + ns_pos[i+1] + ns_neg[i]
    if tmp < max(ns_pos[i], ns_pos[i+1]):  # 如果合并后减小则不合并
        continue
    if tmp > mx:
        updated = True
        mx = tmp
        mx_i = i

if updated:
    # 更新合并后的数组
    ns_neg.pop(mx_i)
    ns_pos[mx_i] = mx
    ns_pos.pop(mx_i+1)
    cnt_pos -= 1

# print(ns_pos)
# print(ns_neg)

ns_pos.sort(reverse=True) print(sum(ns_pos[:M])) ```

字符串归一化
魔法深渊
善变的同伴