python如何实现数组元素两两相加

目录
  • 数组元素两两相加
  • 求数组中两两相加等于20的组合(Python实现)
    • 题目
    • 解析
    • Python实现

数组元素两两相加

count = 0
c2 = []
for i in range(len(c)):
    if count == 0:

        mm = c[i]
        #print(mm)
        #print(count)
    if count == 1:
        print(c[i])
        value = c[i] + mm
        c2 = np.append(c2,value)
        count = 0
        mm = 0
        value = 0
        continue
    count = count + 1

c是原数组,我们设置一个count,当count=0时我们不操作,count=1时我们把当前元素与前一元素相加。

count=0其实相当于奇数,count=1相当于偶数

求数组中两两相加等于20的组合(Python实现)

题目

求数组中两两相加等于20的组合。

例:给定一个数组[1, 7, 17, 2, 6, 3, 14],这个数组中满足条件的有两对:17+3=20, 6+14=20。

解析

分为两个步骤:

  • 先采用堆排序或快速排序对数组进行排序,时间复杂度为O(nlogn)。
  • 然后对排序的数组分别从前到后和从后到前进行遍历, 时间复杂度为O(n)。

假设从前到后遍历的下标为begin,从后到前遍历的下标为end。

  • 当arr[begin] + arr[end] < 20时,满足条件的数一定在[begin+1, end]之间;
  • 当arr[begin] + arr[end] > 20时,满足条件的数一定在[begin, end-1]之间;
  • 当arr[begin] + arr[end] = 20时,找到一组符合条件的数,剩下的组合一定在[begin-1, end-1]之间。

整个算法的时间复杂度为O(nlogn)。

Python实现

# -*- coding:utf-8 -*-
def quick_sort(arr, left, right):
    """快速排序"""
    if left >= right:
        return
    low = left
    high = right
    p = arr[left]
    while left < right:
        while left < right and arr[right] >= p:
            right -= 1
        arr[left] = arr[right]
        while left < right and arr[left] <= p:
            left += 1
        arr[right] = arr[left]
    arr[left] = p
    quick_sort(arr, low, left-1)
    quick_sort(arr, left+1, high)
def find_sum(arr, sum):
    """寻找数组中相加等于sum的组合"""
    quick_sort(arr, 0, len(arr) - 1)
    begin, end = 0, len(arr) - 1
    while begin < end:
        if arr[begin] + arr[end] < sum:
            begin += 1
        elif arr[begin] + arr[end] > sum:
            end -= 1
        else:
            print('%s %s' % (arr[begin], arr[end]))
            begin += 1
            end -= 1
if __name__ == '__main__':
    arr = [1, 7, 17, 2, 6, 3, 14]
    find_sum(arr, 20)

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Python之list对应元素求和的方法

    本次分享将讲述如何在Python中对多个list的对应元素求和,前提是每个list的长度一样.比如:a=[1,2,3], b=[2,3,4], c=[3,4,5], 对a,b,c的对应元素求和,输出应为[6,9,12]. 方法一: 直接求解,按照对应元素相加的原则,可先定义一个函数. def list_add(a,b): c = [] for i in range(len(a)): c.append(a[i]+b[i]) return c if __name__ == '__main__': a

  • python 将numpy维度不同的数组相加相乘操作

    第一种 np矩阵可以直接与标量运算 >>>import numpy as np >>>arr1 = np.arange(12).reshape([2,2,3]) >>>arr1 array([[[ 0, 1, 2], [ 3, 4, 5]], [[ 6, 7, 8], [ 9, 10, 11]]]) >>>arr1*5 array([[[ 0, 5, 10], [15, 20, 25]], [[30, 35, 40], [45, 50

  • python两个list[]相加的实现方法

    1. 利用操作符+ 比如: a = [1,2,3] b = [4,5,6] c = a+b c的结果:[1,2,3,4,5,6] 2 利用extend 比如: a = [1,2,3] b = [4,5,6] a.extend(b) a的结果:[1,2,3,4,5,6] 结果是一样的,但是+号生成的是一个新的对象,而extend则是在原地的修改a对象. 另外注意:列表的append方法,是往列表中添加新元素 比如: a = [1,2,3] a.append(4) #后面跟的是元素类型 a的结果为:

  • python实现合并两个数组的方法

    本文实例讲述了python实现合并两个数组的方法.分享给大家供大家参考.具体如下: python合并两个数组,将两个数组连接成一个数组,例如,数组 a=[1,2,3] ,数组 b=[4,5,6],连接后:[1,2,3,4,5,6] 方法1 a=[1,2,3] b=[4,5,6] a=a+b 方法2 a=[1,2,3] b=[4,5,6] a.extend(b) 希望本文所述对大家的Python程序设计有所帮助.

  • JavaScript清空数组元素的两种方法简单比较

    本文实例讲述了JavaScript清空数组元素的两种方法简单比较.分享给大家供大家参考.具体分析如下: JavaScript中数组清空有多种方法: var arr = [1, 2, 3]; arr = [];//方法一 arr.length = 0;//方法二 arr = null;//方法三 delete arr;//方法四 这里比较最常用的第一种和第二种 var arr = [1, 2, 3]; // 方法一 // 优点:如果有其他地方用到了数组arr中的元素,这种方法相对来说更安全.并且也

  • python简单获取数组元素个数的方法

    本文实例讲述了python简单获取数组元素个数的方法.分享给大家供大家参考.具体如下: 复制代码 代码如下: mySeq = [1,2,3,4,5]  print len(mySeq) 运行结果如下: 5 希望本文所述对大家的Python程序设计有所帮助.

  • Python简单计算数组元素平均值的方法示例

    本文实例讲述了Python简单计算数组元素平均值的方法.分享给大家供大家参考,具体如下: Python 环境:Python 2.7.12 x64 IDE :     Wing IDE Professional  5.1.12-1 题目:  求数组元素的平均值 实现代码: # coding:utf-8 #求数组元素的平均值 a=[1,4,8,10,12] b=len(a) sum=0 print "我们测试结果:" print "数组长度为:",b for i in

  • 用python实现将数组元素按从小到大的顺序排列方法

    如下所示: def findSmallest(arr): smallest = arr[0]#将第一个元素的值作为最小值赋给smallest smallest_index = 0#将第一个值的索引作为最小值的索引赋给smallest_index for i in range(1, len(arr)): if arr[i] < smallest:#对列表arr中的元素进行一一对比 smallest = arr[i] smallest_index = i return smallest_index

  • python如何实现数组元素两两相加

    目录 数组元素两两相加 求数组中两两相加等于20的组合(Python实现) 题目 解析 Python实现 数组元素两两相加 count = 0 c2 = [] for i in range(len(c)): if count == 0: mm = c[i] #print(mm) #print(count) if count == 1: print(c[i]) value = c[i] + mm c2 = np.append(c2,value) count = 0 mm = 0 value = 0

  • python numpy.power()数组元素求n次方案例

    如下所示: numpy.power(x1, x2) 数组的元素分别求n次方.x2可以是数字,也可以是数组,但是x1和x2的列数要相同. >>> x1 = range(6) >>> x1 [0, 1, 2, 3, 4, 5] >>> np.power(x1, 3) array([ 0, 1, 8, 27, 64, 125]) >>> x2 = [1.0, 2.0, 3.0, 3.0, 2.0, 1.0] >>> np.

  • python实现list元素按关键字相加减的方法示例

    本文实例讲述了python实现list元素按关键字相加减的方法.分享给大家供大家参考,具体如下: Python list中的元素按关键字相加或相减: # coding=utf-8 # 两个list按关键字相加或相减 def ListAdd(list1, list2, bAdd = True): if bAdd == False: list2 = [(k, -v) for (k, v) in list2] d = {} list0 = list1 + list2 for (k, v) in lis

  • Python实现翻转数组功能示例

    本文实例讲述了Python实现翻转数组功能.分享给大家供大家参考,具体如下: 题目描述 给定一个长度为n的整数数组a,元素均不相同,问数组是否存在这样一个片段,只将该片段翻转就可以使整个数组升序排列.其中数组片段[l,r]表示序列a[l], a[l+1], ..., a[r].原始数组为 a[1], a[2], ..., a[l-2], a[l-1], a[l], a[l+1], ..., a[r-1], a[r], a[r+1], a[r+2], ..., a[n-1], a[n], 将片段[

  • PHP数组的定义、初始化和数组元素的显示实现代码

    从ASP初入门到PHP,感觉到PHP的强大之一就是内置函数的丰富,比如先前学习的PHP日期时间函数,读写文件的相关函数等都无不表明了PHP的更专业.更令用户的使用得心应手. 一开始我对PHP函数的丰富功能很兴奋,随着对越来越多近乎变态多的函数接触之后,突然联想到了ASP内置函数的稀少,要完成某项特殊功能,常须自定义函数,随着应用的在增多,自己居然也有了一套常用的函数库.然而现在在PHP中,这些功能早已被标准化.规范化而浓缩为内置函数直接使用,曾经的ASP开发人员成为了PHP的普通用户. 但转念一

  • TypeScript调整数组元素顺序算法

    目录 前言 实现思路 实现代码 代码的可扩展性 测试用例 示例代码 总结 前言 有一个整数数组,我们想按照特定规则对数组中的元素进行排序,比如:数组中的所有奇数位于数组的前半部分. 本文将带大家实现这个算法,欢迎各位感兴趣的开发者阅读本文. 实现思路 我们通过一个实例来分析下:假设有这样一个数组:[2, 4, 5, 6, 7, 8, 9, 11],将奇数移动到最前面后,就是:[11, 9, 5, 7, 6, 8, 4, 2]. 通过观察后,我们发现在扫描这个数组的时候,如果发现有偶数出现在奇数的

随机推荐