• leetcode刷题-945-使数组唯一的最小增量


    问题描述

    给定整数数组 A,每次 move 操作将会选择任意 A[i],并将其递增 1

    返回使 A 中的每个值都是唯一的最少操作次数。

    示例

    示例 1:

    输入:[1,2,2]
    输出:1
    解释:经过一次 move 操作,数组将变为 [1, 2, 3]。
    示例 2:

    输入:[3,2,1,2,1,7]
    输出:6
    解释:经过 6 次 move 操作,数组将变为 [3, 4, 1, 2, 5, 7]。
    可以看出 5 次或 5 次以下的 move 操作是不能让数组的每个值唯一的。

    实现

    实现1 字典存储元素及元素重复情况,重复的逐个进行计算

    A_len: A数组长度,用于遍历

    A_dic: 存储数组元素以及元素出现次数

    repeates: 存储有重复的元素

    repeate_done: 以完成递增操作的元素以及递增数值

    move_sum: 递增操作总次数

    将数组使用数据类型为字典的A_dic存储,数组元素对应key值,元素数量对应value值

    遍历A_dic中出现次数大于1的元素,将其放入到repeates中

    遍历repeates数组,开始进行递增操作,先检查是否已经进行过相同元素的操作,若有,则从上次相同元素的递增次数开始探测,若没有,则从该元素的下一位开始探测,若有空位,则move_sum加上探测成功的递增次数,若没有,继续进行下一位的探测,直至找到空位为止

    时间复杂度为O(n^2)

    def min_increament_for_unique(A):
        """
        hash存储,找相邻的空位置相加
        """
        A_len = len(A)
        A_dic = {}
        repeates = []
        repeate_done = {}
        move_sum = 0
    
        for i in range(A_len):
            if A[i] in A_dic:
                A_dic[A[i]] += 1
                repeates.append(A[i])
            else:
                A_dic[A[i]] = 1
    
        for x in repeates:
            done_flag = False
            
            if x in repeate_done:
                current_move_count = repeate_done[x]+1
            else:
                current_move_count = 1
            
            while not done_flag:
                if (x+current_move_count) not in A_dic:
                    A_dic[x+current_move_count] = 1
                    repeate_done[x] = current_move_count
                    move_sum += current_move_count
                    done_flag = True
                else:
                    current_move_count += 1
                    move_sum += 1
    
        return move_sum
    

  • 相关阅读:
    demo_14 更多卡片视图实现
    demo_13 基础卡片视图实现
    demo_10_06 云数据库聚合_lookup_02
    demo_10_06 云数据库聚合_lookup_01
    demo_12 子组件选项卡切换及事件传递
    demo_11 封装数据请求
    demo_10_05 云数据库聚合_limit
    demo_10_04 云数据库聚合_group_02
    sed 过滤和替换文本函数
    curl 参数
  • 原文地址:https://www.cnblogs.com/liuheblog/p/12296372.html
Copyright © 2020-2023  润新知