알고리즘과 데이터 구조 브러시 제목

1. 배열의 최소 회전을 찾기

설명 같은 배열을 회전 [-2, 3, 5, 6, 9, -10, -5, 오른쪽 좋은 부분 이동할 수 있도록 좌측 어레이의 서열을 특징으로한다.
[생각] 이진 검색

def find_min(li):
    l = 0
    r = len(li)
    m = int(r/2)

    if li[l] < li[m]:
        # 此时是左边递增,最小值位于右边
        return find_min(li[m+1:r])
    elif li[l] > li[m]:
        # 最小值位于mid左面,包含mid
        return find_min(li[l:m+1])
    else:
        return li[mid]

2. 제로와 배열

설명 요소를 0에 가까운 서브 어레이
[생각] , 두 개의 케이스, S (N)과 S (m) -S (n)이있다 1-N 및 소자들 (N) 함 . 두 번째는 두 개의 이웃 가난한 가지고 간다, 정렬 할 수 있습니다. 정렬 복잡도 nlog (N).

from collections import OrderedDict
from copy import deepcopy

def get_mini_sublist(li):
    part1_index = {}
    part2_index = {}
    
    # 第一部分,前n项求和
    for i in range(1, len(li)):
        part1_index[(0, i)] = sum(li[:i])
    part1_index = OrderedDict(sorted(part1_index.items(), key=lambda x:x[1] ))
    
    # 第二部分,排序,做差
    t1 = deepcopy(part1_index).popitem(last=True), 
    t2 = deepcopy(part1_index).popitem(last=False)
    
    for i,j in zip(t1.items(), t2.items()):
        part2_index[(i[0][1], j[0][1])] = j[1]-i[1]
    
    # 融合,然后取值最小值    
    part2_index.update(part1_index)         
    key_min = min(part2_index, key=lambda x:abs(part2_index[x])
    return key_min, part2_index[key_min]

추천

출처www.cnblogs.com/geoffreyone/p/11506019.html