Python幾個算法實現

1.平衡點問題:

好比int[] numbers = {1,3,5,7,8,25,4,20}; 25前面的總和爲24,25後面的總和也是24,25這個點就是平衡點;假如一個數組中的元素,其前面的部分等於後面的部分,那麼這個點的位序就是平衡點
要求:返回任何一個平衡點python

 1 def balance_point(li):
 2     start = 0
 3     end = len(li)-1
 4     sum_start = li[start]
 5     sum_end = li[end]
 6     while start < end:
 7         if sum_start == sum_end and end-start == 2:
 8             return start+1
 9         if sum_start < sum_end:
10             start += 1
11             sum_start += li[start]
12         else:
13             end -= 1
14             sum_end += li[end]
15     return -1

2.支配點問題:

支配數:數組中某個元素出現的次數大於數組總數的一半時就成爲支配數,其所在位序成爲支配點;好比int[] a = {3,3,1,2,3};3爲支配數,0,1,4分別爲支配點;
要求:返回任何一個支配點git

1 def control_point(li):
2     count_li = len(li)/2
3     for i in li:
4         if li.count(i) > count_li:
5             return i
6 
7     return -1

3.python冒泡排序

冒泡排序是最簡單且穩定的排序方式,時間複雜度爲O(n*n).下面主要使用Python range()函數控制循環,以及python返回多個值的性質,使得代碼很簡單github

def bubble_sort(li):
    for i in range(len(li)-1, 0, -1):
        for j in range(0,i):
            if li[j] > li[j+1]:
                li[j+1], li[j] = li[j], li[j+1]

 

4.輸出1~N之間的素數

定義:素數又叫質數維基百科數組

from math import sqrt


def sushu_out(n):
    result = []
    for num in range(2, n):
        flag = True
        for j in range(2, int(sqrt(num))+1):
            if num % j == 0:
                flag = False
                break
        if flag:
            result.append(num)
    print result, len(result)

5.刪除list中重複元素

  • l2 = list(set(l1))
  • l2 = {}.fromkeys(l1).keys()

不改變原來順序app

  • l2 = sorted(set(l1),key=l1.index)
  • 遍歷

6.斐波那契數列

定義斐波那契數列函數

def fib(n):
    ret = []
    a = 0
    b = 1
    for i in range(0, n):
        ret.append(b)      # 主意此處不能使用ret[i] = b ,會致使數組越界,由於ret如今爲空,Java中數組初始化要給定長度,Python不一樣。
        a, b = b, a+b
    return ret

 

同步於:http://polarisary.github.io/2014/07/08/python_calc/
spa

相關文章
相關標籤/搜索