• 力扣数组的遍历日结


    今天做的题都是在一个不按顺序排列的自然数数组里搜寻出现了2次,没出现的数字等,而且还有复杂度要求

    如果是数组有顺序,直接二分就可以了

    但是没有顺序的数组,如果先排序,再二分,复杂度就很高了,因为排序就很费劲

    所以今天知道的一个惊为天人的方法就是【把数组中的自然数当作下标来看】,但是要注意的是【覆盖原数组会带来何种影响】

    比如找数组中没出现过的自然数,就可以遍历数组把数组中的【数字1】当作【下标】,在数组中找到该下标对应的【数字2】,对其进行某种操作,今晚看到的操作是*-1,这种方法也容易返回,毕竟遍历总会遍历到【数字2】的,到时候abs就回去了,可以继续把【数字2】当作下标;遍历完之后,如果数组中还有正数,就说明,这个数字没有*-1,为什么没有*-1呢,是因为它的下标数字并不存在于数组中,所以返回该正数的下标,就是数组中没有出现的数字;

    做完这个题后继续下一题,让我找出现了两次的数字,想当然的我觉得,出现两次的数,那就是*-1又*-1,那就是正数了,开开心心去找正数,结果返回的值是【出现了2次+没出现】的数;原来,出现两次还得有个要求,就是,这个正数应该是*-1依然大于0的数字的下标,说明之前就是负数了;

    然后继续下一题,找的是没出现过的最小正整数,我又开始快乐的*-1,结果这里并不是这样做的,而是交换数字,因为要遍历所有数字,如果提前覆盖掉了,后面的数字就用不上了

  • 相关阅读:
    应用部署架构演进【转载】
    TiDB 学习笔记一(运维管理)
    c++ strcmp函数
    C++ sort()函数
    C++ 遍历set的三种方式
    nvcc fatal : '--ptxas-options=-v': expected a number
    PAT A1039 Vector的使用
    C++ set
    C++ int与string互转换
    C++%f和%lf的区别
  • 原文地址:https://www.cnblogs.com/liuxiangyan/p/14444577.html
Copyright © 2020-2023  润新知