11-15题

作者: yy辰 | 来源:发表于2018-10-07 18:16 被阅读13次

11、和为S的连续正数序列
输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序
最笨的办法直接从头遍历,但是肯定还有更好的方法,上网查了一下,不得不说,数学真的很重要啊。
(链接:https://www.nowcoder.com/questionTerminal/c451a3fd84b64cb19485dad758a55ebe
来源:牛客网)
满足条件的n分两种情况:
n为奇数时,序列中间的数正好是序列的平均值,所以条件为:(n & 1) == 1 && sum % n == 0;
n为偶数时,序列中间两个数的平均值是序列的平均值,而这个平均值的小数部分为0.5,所以条件为:(sum % n) * 2 == n.
看了思路自己用代码实现:

class Solution:
    from math import sqrt
    def FindContinuousSequence(self, tsum):
        temp = []
        for n in range(2, int(sqrt(2*tsum))):
            if n % 2 == 1:
                if tsum % n == 0:
                    left = int(tsum/n) - int((n-1)/2)
                    right = int(tsum/n) + int((n-1)/2)
                    if left >= 1:
                        temp.append(list(range(left, right+1)))
            if n % 2 == 0:
                if int(0.5*n) == int(tsum%n):
                    left = int(tsum//n) - int(n/2) + 1
                    right = int(tsum//n) + int(n/2)
                    if left >= 1:
                        temp.append(list(range(left, right+1)))
        rst = sorted(temp, key=lambda x:x[0], reverse=False)
        return rst

12、左旋转字符串
对于一个给定的字符序列S,请你把其循环左移K位后的序列输出
这题比较简单,使用列表切片就可以了

class Solution:
    def LeftRotateString(self, s, n):
        if s == '':
            return s
        temp = int(n%len(s))
        return s[temp:] + s[:temp]

13、数字在排序数组中出现的次数
直接可以用python列表的count方法,或者用字典做,但是是个排序数组,可以联想到用二分查找

class Solution:
    def GetNumberOfK(self, data, k):
        left = 0
        right = len(data)
        while k != data[(left+right)//2]:
            if k > data[(left+right)//2]:
                left = (left+right)//2
            else:
                right = (left+right)//2
            if left==right and k!=data[(left+right)//2]:
                return 0
        temp = (left+right)//2
        rst = 0
        for i in range(temp, -1, -1):
            if data[i] == k:
                rst += 1
            else:
                break
        for i in range(temp+1, len(data)):
            if data[i] == k:
                rst += 1
            else:
                break
        return rst

14、数组中只出现一次的数字
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字
可以直接用字典或者用count函数。之前在leetcode中有一题类似,不过只有一个出现一次的数字。那么可以去重后求和的两倍减去原数组的和,但有两个数字的话就不行了

class Solution:
    def FindNumsAppearOnce(self, array):
        dic = {}
        for i in array:
            dic[i] = dic.get(i, 0) + 1

        rst = []
        for i in array:
            if dic[i] == 1:
                rst.append(i)

        return rst

15、翻转单词顺序列

class Solution:
    def ReverseSentence(self, s):
        temp = s.split(' ')
        rst = temp[::-1]
        return ' '.join(rst)

相关文章

  • MySQL经典50题-第11-15题

    MySQL50-5-第11-15题 本文中介绍的是第11-15题,具体的题目包含: 查询没有学完全部课程的同学的信...

  • 11-15题

    11、和为S的连续正数序列输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序...

  • 2021-04-22

    30道大概率会考到的题( 11-15题) 本章内容 11,箭头函数特点 12,CSS盒模型 13,Vue组件dat...

  • 第九章 德育

    单项选择题1-5 CCDBC 6-10 DCCCC 11-15 DCDDC16-20 ADAAA 21-2...

  • Python入门与进阶(11-13 11-14 11-15)

    11-13 出个题,用闭包解决!11-14 先用非闭包的方法解决11-15 再用闭包解决一下_

  • 读经笔记03

    读经内容:创11-15 & 太11-15 读经感悟: 但我告诉你们,在这里有一人比殿更大。‘我喜爱怜恤,不喜爱祭祀...

  • lesson 11-15 笔记汇总(赖世雄初级上)

    lesson 11-15 视频点击这里 link: https://www.bilibili.com/video/...

  • 获取系统时间并格式化

    输出结果:11-15 13:42:48.525 6257-6257/com.example.datetest D/...

  • 诗歌鉴赏

    翻译:泰戈尔《飞鸟集》11-15节 11 Some unseen fingers, like an idle br...

  • 《11-15》

    《十一》 月隐秋叶冬已现 天露滴凝已成霜 《十二》 雪崖素衣寒 音颤银叶飘 泪落弦上弹 细将忧恨传 《十三》 曾经...

网友评论

      本文标题:11-15题

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