精华内容
下载资源
问答
  • 题目描述: 一个有 n 个元素的数组,这 n 个元素既可以是正数也可以是...找出所有的子数组,然后出子数组的和,在所有子数组的和中取最大值。 代码实现: #!/usr/bin/env python3 # -*- coding: utf-8 -*- # @Time
  • Python程序员面试算法宝典---解题总结: 第4章 数组 4.7 如何求数组中两个元素的最小距离 题目: 给定一个数组,数组中含有重复元素,给定两个数字num1num2,求这两个数字在 数组中出现的位置的最小距离。 分析: ...
    # -*- coding: utf-8 -*-
    
    '''
    Python程序员面试算法宝典---解题总结: 第4章 数组 4.7 如何求数组中两个元素的最小距离
    
    题目:
    给定一个数组,数组中含有重复元素,给定两个数字num1和num2,求这两个数字在
    数组中出现的位置的最小距离。
    
    分析:
    
    关键:
    1 书上解法
    令num1出现的位置为pos1,令num2出现的位置为pos2。
    每次出现num1,则更新pos1,并计算|pos1 - pos2|
    每次出现num2,则更新pos2,并计算|pos1 - pos2|
    
    2 我之所以没想到
    是因为忘记了可以在出现num1或者num2的时候,通过更新
    位置,计算位置下标值。
    这个实际就是搜索中求包含若干个搜索字符串最近的文章内容。
    
    
    参考:
    Python程序员面试算法宝典
    '''
    
    def getMinDistance(array, num1, num2):
        if not array:
            return
        pos1 = -1
        pos2 = -1
        minValue = float('inf')
        size = len(array)
        i = 0
        while i < size:
            if array[i] == num1:
                pos1 = i
                # 注意,只有pos1和pos2都有值才有比较的意义
                if pos2 >= 0:
                    minValue = min(minValue, pos1 - pos2)
            if array[i] == num2:
                pos2 = i
                if pos1 >= 0:
                    minValue = min(minValue, pos2 - pos1)
            i += 1
        return minValue
    
    
    def process():
        array = [4,5,6,4,7,4,6,4,7,8,5,6,4,3,10,8]
        result = getMinDistance(array, 4, 8)
        print result
    
    
    if __name__ == "__main__":
        process()

     

    展开全文
  • Python程序员面试算法宝典---解题总结: 第4章 数组 4.2 如何查找数组元素的最大值最小值 题目: 给定数组a1,a2,a3,..,an,要求找出数组中的最大值最小值。 假设数组中的值两两各不相同。 分析: 我记得之前有...
    # -*- coding: utf-8 -*-
    
    '''
    Python程序员面试算法宝典---解题总结: 第4章 数组 4.2 如何查找数组中元素的最大值和最小值
    
    题目:
    给定数组a1,a2,a3,..,an,要求找出数组中的最大值和最小值。
    假设数组中的值两两各不相同。
    
    分析:
    我记得之前有分治算法的题目就是求数组的最大值和最小值的。
    最简单的方法就是遍历整个数组用两个变量minValue和maxVale来记录最小值和最大值。
    分治算法的思想:
    将问题划分成更小的问题,对小问题求解,将各个小问题的求解值汇总,
    然后求解出大问题的值。
    
    关键:
    1 分治三步骤
    1) 划分子问题,2) 递归, 3)合并
    
    2 为了减少递归的次数
    在只有两个元素的时候直接比较,而不是通过递归来比较
            # 如果有两个元素就可以比较大小了,节省递归次数
            if begin + 1 == end:
                if data[begin] > data[end]:
                    return data[end], data[begin]
                else:
                    return data[begin], data[end]
    
    参考:
    Python程序员面试算法宝典
    '''
    
    class MyArray(object):
        def __init__(self):
            self.min = float('inf')
            self.max = float('-inf')
    
        def findMinAndMax(self, data, begin, end):
            if not data:
                return None, None
            if begin > end:
                return float('inf'), float('-inf')
            if begin == end:
                return data[begin], data[begin]
            # 如果有两个元素就可以比较大小了,节省递归次数
            if begin + 1 == end:
                if data[begin] > data[end]:
                    return data[end], data[begin]
                else:
                    return data[begin], data[end]
            # 对左半边递归处理
            size = end - begin
            middle = size / 2 + begin
            leftMin, leftMax = self.findMinAndMax(data, begin, middle)
            # 对右半边递归处理
            rightMin, rightMax = self.findMinAndMax(data, middle + 1, end)
            # 合并处理
            minValue = min(leftMin, rightMin)
            maxValue = max(leftMax, rightMax)
            if minValue < self.min:
                self.min = minValue
            if maxValue > self.max:
                self.max = maxValue
            return minValue, maxValue
    
    
    def process():
        data = [1, 5, 6, 3, 2, 4]
        array = MyArray()
        array.findMinAndMax(data, 0, len(data) - 1)
        minValue = array.min
        maxValue = array.max
        print "min: {min}, max: {max}".format(
            min=minValue,
            max=maxValue
        )
        data = list(range(1, 7))
        array = MyArray()
        array.findMinAndMax(data, 0, len(data) - 1)
        minValue = array.min
        maxValue = array.max
        print "min: {min}, max: {max}".format(
            min=minValue,
            max=maxValue
        )
        data = list(range(6, 0, -1))
        array = MyArray()
        array.findMinAndMax(data, 0, len(data) - 1)
        minValue = array.min
        maxValue = array.max
        print "min: {min}, max: {max}".format(
            min=minValue,
            max=maxValue
        )
    
    
    if __name__ == "__main__":
        process()

     

    展开全文
  • >>>c = Counter(a=4, b=2, c=0, d=-2) >>>sorted(c.elements()) ['a', 'a', 'a', 'a', 'b', 'b'] 这个代码的意思就是,统计两个数字各个元素的出现次数,当出现次数相同时,返回它。 疫情中的英国, 压力真大。 25/...

    Leetcode 350题 Intersection of Two Arrays II
    Given two arrays, write a function to compute their intersection.

    Example 1:
    
    Input: nums1 = [1,2,2,1], nums2 = [2,2]
    Output: [2,2]
    
    Example 2:
    
    Input: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
    Output: [4,9]
    
    Note:
    
    Each element in the result should appear as many times as it shows in both arrays.
    The result can be in any order.
    
    Follow up:
    
    What if the given array is already sorted? How would you optimize your algorithm?
    What if nums1's size is small compared to nums2's size? Which algorithm is better?
    What if elements of nums2 are stored on disk, and the memory is limited such that you cannot load all elements into the memory at once?
    

    Python的脚本语言优势体现出来了。
    一行代码解决问题。

    class Solution:
        def intersect(self, nums1: List[int], nums2: List[int]) -> List[int]:
            return list((Counter(nums1) & Counter(nums2)).elements())
    

    Counter()的用法。
    Counter()用于技术可哈希的对象。 就是用来统计某元素出现的次数。

    >>> from collections import Counter
    >>> c = Counter('abcasd')
    >>> c
    Counter({'a': 2, 'c': 1, 'b': 1, 's': 1, 'd': 1})
    

    .element()方法的用法。
    返回一个迭代器,其中每个元素将重复出现计数值所指定次。 元素会按首次出现的顺序返回。 如果一个元素的计数值小于一,elements() 将会忽略它。

    >>>c = Counter(a=4, b=2, c=0, d=-2)
    >>>sorted(c.elements())
    ['a', 'a', 'a', 'a', 'b', 'b']
    

    这个代码的意思就是,统计两个数字各个元素的出现次数,当出现次数相同时,返回它。

    疫情中的英国,
    压力真大。
    25/05/2020

    展开全文
  • Python程序员面试算法宝典---解题总结: 第4章 数组 4.23 如何求两个有序集合交集 题目: 有两个有序集合,集合中每个元素都是一段范围,求其交集, 例如集合{[4, 8], [9, 13]}{[6, 12]}交集为 {[6, 8], [9...
    # -*- coding: utf-8 -*-
    
    '''
    Python程序员面试算法宝典---解题总结: 第4章 数组 4.23 如何求两个有序集合的交集
    
    题目:
    有两个有序的集合,集合中的每个元素都是一段范围,求其交集,
    例如集合{[4, 8], [9, 13]}和{[6, 12]}的交集为
    {[6, 8], [9, 12]}。
    
    分析:
    举例:
    假设一个集合是[b1, e1],另一个集合是[b2, e2]
    两者的交集如下:
    b = max{b1, b2}
    e = min{e1, e2}
    如果b <= e,则有交集为[max{b1, b2}, min{e1, e2}];
    否则,没有交集
    
    
    关键:
    
    参考:
    Python程序员面试算法宝典
    '''
    
    def getIntersection(arr1, arr2):
        results = []
        if not arr1 or not arr2:
            return results
        len1 = len(arr1)
        len2 = len(arr2)
        i = 0
        j = 0
        while i < len1 and j < len2:
            b1 = arr1[i][0]
            e1 = arr1[i][1]
            b2 = arr2[j][0]
            e2 = arr2[j][1]
            b = max(b1, b2)
            e = min(e1, e2)
            # 如果当前元素有交集
            if b <= e:
                result = [b, e]
                results.append(result)
                # 接下来需要让较小的集合往前走
                if e1 < e2:
                    i += 1
                else:
                    j += 1
            else:
                # 如果第一个数组中的最小值大于第二个数组中最大值
                if b1 > e2:
                    j += 1
                else:
                    i += 1
        return results
    
    
    def process():
        arr1 = [[4, 8], [9, 13]]
        arr2 = [[6, 12], [13, 15]]
        results = getIntersection(arr1, arr2)
        print results
    
    
    if __name__ == "__main__":
        process()

     

    展开全文
  • 有一个无序整型数组如何求出该数组排序后的任意两个相邻元素的最大差值?要求时间复杂度空间复杂度尽可能的低 二、解题思路 1、方法一 我们可以使用任何一种高效算法,然后再对相邻的两个元素求差值。 这种方法...
  • 针对上次没有解决的问题,本来想试一下动态规划是如何实现的,但是没有静得下心来好好去理解下动态规划的知识。然而我发现这个问题升级...首先先从第0个元素到n个元素的和(下标值),记为sum(0,n),如果需要知道第m
  • 有一个无序整型数组如何求数组排序后的任意两个相邻元素的最大差值? 解决方案: 1.循环数组,找到最小值最大值。 2.若有N个数,就创建N+1个桶来装数,分别为 0号桶,1号桶,2号桶…N号桶 。 3.定义三个大小为...
  • 文章目录Pythonaxis如何理解axisaxis含义笛卡尔坐标多维数组的元素指定多维数组指定轴axis取值例子例一axis=0axis=-3例二axis=1axis==-2例三axis=2结语 Pythonaxis   在使用numpy库时,有许多地方...
  • python——三道贪心算法例题

    万次阅读 2017-10-24 21:44:39
    1.找零钱问题:假设只有 1 分、 2 分、五分、 1 角、二角、 五角、 1元硬币。...2.最大子数组之问题:给定一个整数数组(数组元素有负有正),其连续子数组之和的最大值。3.汽车加油站问题
  • Python编程入门经典

    热门讨论 2013-10-27 14:17:39
    第Ⅱ部分 Python语言标准库 第4章 做出决策 49 4.1 比较两个值是否相等 49 4.2 比较两个值是否不相等 51 4.3 比较两个值大小 51 4.4 对真值假值取反 53 4.5 观察多个比较运算结果 54 4.6 循环 57 4.6.1 重复...
  • 应用案例 - 用户身份验证 / 英制单位与公制单位互换 / 掷骰子决定做什么 / 百分制成绩转等级制 / 分段函数值 / 输入三条边长度如果能构成三角形就计算周长面积 Day04 - 循环结构 循环结构应用场景 - ...
  • Python 1.数组,元组,集合区别 2.字符串拆分,提取url的元素 ...5.python如何导入库,导入函数 6.自己常用库有哪些 7.requests基本使用方法 8.sorted() sort() 9.xlrd使用,简单写如何获取数据
  • 对于连续子数组,可以用一个数值来存储当前,如果当前小于零,那么在进行到下一个元素的时候,直接把当前赋值为下一个元素,如果当前大于零,则累加下一个元素,同时用一个maxNum存储最大值并随时更新。...
  • 5.1.1 两个字组种群计数的和与差 80 5.1.2 比较两个字组的种群计数 80 5.1.3 统计数组中值为“1”的位元数 82 5.1.4 应用 86 5.2 奇偶性 87 5.2.1 计算字组的奇偶性 87 5.2.2 将表示奇偶性的位元添加到7位量...
  • 3.2.4 两条相交单向链表,如何求他们第一个公共节点? 3.2.5 求单向局部循环链表环入口? 3.2.6 IP地址如何在数据库中存储? 3.2.7 new/deletemalloc/free底层实现? 3.2.8 overload、override、overwrite...
  • 本书旨在探讨如何优化算法效率,详细阐述了经典算法特殊算法实现、应用技巧复杂度验证过程,内容由浅入深,能帮助读者快速掌握复杂度适当、正确率高高效编程方法以及自检、自测技巧,是参加ACM ICPC、Google...
  • python来描述的如何读懂正则。 <p>Js也支持三种模式,gim,表示全局,不区分大小写,多行。 一般来说很少有人这么使用var xxx = new RegExp(),而是用字面量方式,比如...
  • 如何查找容器内所有符合条件的元素 3. Python开发相关 list tuple区别 生成器迭代器 Python定义实例化方法 4. 数据结构相关 红黑树结构,查找时间复杂度 堆排序时间复杂度 Top K排序 如何用O...

空空如也

空空如也

1 2
收藏数 22
精华内容 8
关键字:

python如何求数组元素的和

python 订阅