本文共 2752 字,大约阅读时间需要 9 分钟。
// 因为快排在 原数据 是有序的或者逆序的时候,退化为O(n2)
class Solution {public: bool containsDuplicate(vector & nums) { if (nums.size() <= 1) return false; Sort(nums); for (int i = 1; i < nums.size(); ++i){ if (nums[i] == nums[i-1]) return true; } return false; } void Sort(vector & nums){ if (nums.size() <= 1) return; int len = nums.size(); quickSort(nums, 0, len-1); } void quickSort(vector & nums, int begin, int end){ if (begin >= end) return; int first = begin; int last = end; int flag = nums[first]; while (first < last){ while(nums[last] >= flag && last > first){ last--; } if (last > first){ nums[first++] = nums[last]; } while(nums[first] <= flag && first < last){ first++; } if (first < last){ nums[last--] = nums[first]; } } nums[first] = flag; int mid = first; quickSort(nums, begin, mid-1); quickSort(nums, mid+1, end); }};
// 快排Java实现
private void quickSort(int[] nums, int start, int end){ if (end - start < 1) return ; int p = start; int q = end; int tmp = nums[start]; while(p < q){ while(p < q && nums[q] >= tmp) q--; if (p < q) nums[p++] = nums[q]; while( p < q && nums[p] <= tmp) p++; if (p < q) nums[q--] = nums[p]; } nums[p] = tmp; quickSort(nums, start, p-1); quickSort(nums, p+1, end); }
class Solution {public: bool containsDuplicate(vector & nums) { if (nums.size() <= 1) return false; set s; for (int i = 0; i < nums.size(); ++i){ if (s.insert(nums[i]).second) continue; return true; } return false; }};
转载地址:http://ujpbb.baihongyu.com/