其他分享
首页 > 其他分享> > 217.存在重复元素

217.存在重复元素

作者:互联网

1.思路:将用户输入数组先排序,然后从0开始遍历至末尾,若存在相邻两个元素相同(arr【i】 == arr【i+1】),则说明存在相同元素;

2.算法选择:对时间复杂度的要求导致排序算法不能选择{“冒泡排序”、“选择排序”、“插入排序”}这些时间复杂度是O(NlogN)的算法;

      这里选择堆排序(heapSort)。【左神写法】

      排好序后的遍历检查时间复杂度是O(N);

3.程序:

class Solution { public:
  void swap(vector<int>& arr,int m,int n){     int temp = arr[m];       arr[m] = arr[n];     arr[n] = temp;     }

// 具体调用模块
//将数组变成大根堆


  void heapInsert(vector<int>& arr,int index){      int father = (index-1)/2;      while(arr[father]<arr[index])      {         swap(arr,father,index);         index = father;         father = (index-1)/2;      }      } //从0开始向下,将剩余根堆区的数据再次组成大根堆  void heapify(vector<int>& arr,int index,int heapSize){      int left = 2*index+1;      while(left<heapSize){ //如果有左孩子即如果还有孩子          int largest = left+1<heapSize&&arr[left]<arr[left+1]?left+1:left;//二子选大          largest = arr[largest]>arr[index]?largest:index; // 父和大子选大          if(largest == index)  //若父即大,则不用换            break;         swap(arr,largest,index);  //走到这里说明大子大于父,换二者          index = largest;         left = index*2+1;
      } }   void heapSort(vector<int>& arr){    //堆排序程序段     int length = arr.size();     if(length<2)       return;     int heapSize=length;           //第一个大根堆的大小      for(int i=0;i<length;i++)     {         heapInsert(arr,i);      //第一次构建大根堆      }    swap(arr,0,--heapSize);//确定数组最大的数据在最后位置交换当前大根堆的首元素arr[0]和arr[heapSize]      while(heapSize>0)//大根堆不为空(数组还未排好序) :大根堆数↓->排好序的数组↑      {         heapify(arr,0,heapSize);           // 第二次构建大根堆         swap(arr,0,--heapSize);       }   } 
    bool containsDuplicate(vector<int>& nums) {      //算法入口,整体思路先排序再查重     heapSort(nums);    //排序     bool success;     success = binaryfind(nums);    //查重     if(success==true)          return true;     else return false;     }     bool binaryfind(vector<int>& nums){    //查重程序段         for(int i=1;i<nums.size();i++)         {   //cout<<nums[i-1]<<nums[i]<<endl;             if(nums[i]==nums[i-1]) return true;         }return false;     } }; 4.截图 ①运行截图

 

 ②leetcode截图

 

 

标签:217,arr,nums,index,重复,元素,int,vector,largest
来源: https://www.cnblogs.com/9yuetian/p/15847926.html