zoukankan      html  css  js  c++  java
  • 一道O(n)+S(1)的leetcode题大神stephan的简要解析

    class Solution {
    public:
      void wiggleSort(vector<int>& nums) {
                        int n = nums.size();
      // Find a median.
                        auto midptr = nums.begin() + n / 2;
                        nth_element(nums.begin(), midptr, nums.end());
      //求第n/2小的数放在n/2位置上
      //最快达到O(n)
                                  int mid = *midptr;
    // Index-rewiring.
                                  #define A(i) nums[(1+2*(i)) % (n|1)]
    //避免0和越界
    // 3-way-partition-to-wiggly in O(n) time with O(1) space.
                                        int i = 0, j = 0, k = n - 1;
    //保证逻辑上的A(i)是这样的
    //过了mid后保证,有大的换到前面去
                                  while (j <= k) {
                                          if (A(j) > mid)
                                          swap(A(i++), A(j++));
                                          else if (A(j) < mid)
                                          swap(A(j), A(k--));
                                          else
                                            j++;
                                              }
                                              }
                                                };

  • 相关阅读:
    搭建JUnit环境
    搭建日志环境并配置显示DDL语句
    先建表还是先建实体类
    hbm2ddl
    总结与提纲
    常见O/R框架介绍
    hibernate 模拟实现和What is and Why O/R Mapping
    hibernate 注解不给提示
    额,你在main.xml中加了一个id以后,要右键点save,才会将这个id加入到R中,否则是没有的。。。R里的东西是程序自动生成的~~~
    导入android工程@Override报错
  • 原文地址:https://www.cnblogs.com/fenglongyu/p/7640607.html
Copyright © 2011-2022 走看看