当前位置: 首页 > wzjs >正文

网站开发是什么工作百家号关键词seo优化

网站开发是什么工作,百家号关键词seo优化,做的网站在百度上搜不出来的,建设代刷网站给你一个整数数组 nums,请你将该数组升序排列。 你必须在 不使用任何内置函数 的情况下解决问题,时间复杂度为 O(nlog(n)),并且空间复杂度尽可能小。 示例 1: 输入:nums [5,2,3,1] 输出:[1,2,3,5]示例 2…

给你一个整数数组 nums,请你将该数组升序排列。

你必须在 不使用任何内置函数 的情况下解决问题,时间复杂度为 O(nlog(n)),并且空间复杂度尽可能小。

    示例 1:

    输入:nums = [5,2,3,1]
    输出:[1,2,3,5]
    

    示例 2:

    输入:nums = [5,1,1,2,0,0]
    输出:[0,0,1,1,2,5]
    

    提示:

    • 1 <= nums.length <= 5 * 104
    • -5 * 104 <= nums[i] <= 5 * 104

    代码:

    #include "solution.h"
    #include <algorithm>
    #include <vector>
    #include <set>
    #include <stdlib.h>static void swapeValue(int& a, int& b) {int temp = a;a = b;b = temp;
    }static int getMiddleVal(int a, int b, int c) {int arr[] = {a, b, c};// 等号右边是lambda表达式,表示一个匿名函数,参数是俩个指针,返回int值。 符号 ->int 可省略,能自动推导出返回值类型auto compareFuc = [](const void* p1, const void* p2) ->int {return *((int*)p1) - *((int*)p2);};// 这里c语言的qsort函数,只排序a,b,c 3个数。这里偷个懒了qsort(arr, sizeof(arr) / sizeof(arr[0]), sizeof(arr[0]), compareFuc);return arr[1];
    }// 将数组这个区间分成左右两个区间,返回中间数的idx,左边区间的所有数小于idx索引处的数,右边区间的数都大于idx索引处的数
    // 为了找到这个idx,过程中可以交换一些数的值。
    static int getIdx(vector<int>& nums, int startIdx, int endIdx) { static auto flag = true; // 有很多相同数字时,超时!为解决这个问题,引入变量flag,让中间值尽量处在区域中间的某个位置if (startIdx == endIdx - 1) {// 相邻的if (nums[endIdx] < nums[startIdx]) {int temp = nums[startIdx];nums[startIdx] = nums[endIdx];nums[endIdx] = temp;}return startIdx;}// 尽量用区域中间某个值作为分界线int idx = startIdx;int midIdx = (startIdx + endIdx) >> 1;int middleVal = getMiddleVal(nums[startIdx], nums[midIdx], nums[endIdx]);int idx_ = startIdx; // 中间那个值对应的索引if (nums[midIdx] == middleVal) {idx_ = midIdx;}else if (nums[endIdx] == middleVal) {idx_ = endIdx;}if (idx_ != idx) {swapeValue(nums[idx], nums[idx_]);}for (int i = startIdx + 1; i <= endIdx; i++) {if (nums[i] < nums[idx] || (flag && nums[i] == nums[idx])) {// 交换nums[i]和 nums[idx + 1]的值// 交换nums[idx] 和nums[idx + 1]的值。// idx值+1// 这样,那个小的值就交换到前面了swapeValue(nums[i], nums[idx + 1]);swapeValue(nums[idx], nums[idx + 1]);++idx;flag = !flag;}}return idx;
    }void qsort(vector<int>& nums, int startIdx, int endIdx) {if (startIdx >= endIdx)return;int idx = getIdx(nums, startIdx, endIdx);qsort(nums, startIdx, idx - 1);qsort(nums, idx + 1, endIdx);
    }class Solution {
    public:vector<int> sortArray(vector<int>& nums) {if (nums.size() < 2) {return nums;}qsort(nums, 0, nums.size() - 1);return nums;}
    };

     测试代码:

    void testLeeCode912() { // 排序数组vector<int> nums = {5, 2, 3, 1};Solution* solution = new Solution();solution->sortArray(nums);for (auto& val : nums) {std::cout << val << endl;}delete solution; // 回收内存
    }

    测试结果:

    ok!

    提交到LeeCode:

    ok!

    总结:总体方法是分段排序。需要将数组分为俩个区域,有中间的一个数,左边的数都小于这个数,右边的数都大于这个数,再对递归每个区域用同样方法。 但是特殊情况容易超时,比如数组是倒序的,或者数组多数数字都一样的情况,这俩种递归次数太多,然后一步步优化。

    http://www.dtcms.com/wzjs/55752.html

    相关文章:

  1. 怎样在网站上做专栏网站优化外包顾问
  2. 网站怎么发布做微商站长之家的作用
  3. 网站建设设计流程给公司做网站的公司
  4. 浙江省建设厅 网站是多少南宁一站网网络技术有限公司
  5. 罗湖网站建设的公司找资源最好的是哪个软件
  6. 个人网站架设关键词分类哪八种
  7. 网站文章后台写完前台不显示天津seo外包团队
  8. 怎么引流到微信呢seo网络推广专员招聘
  9. 天元建设集团有限公司电话号码seo新人培训班
  10. 大型建站公司做网络推广的团队
  11. 网站开发android客户端天津网站制作系统
  12. 做食品网站需要什么条件天天seo站长工具
  13. 网站开发阶段企业培训课程安排表
  14. 县政府网站建设方案徐州seo外包公司
  15. 网站维护项目免费的外链平台
  16. 深圳购物商城网站建设网络销售公司怎么运作
  17. 网站制作代码竞价网站
  18. 企业的网站建设费账务处理广州:推动优化防控措施落
  19. 微商平台appseo的中文是什么
  20. 能免费做封面的网站指数运算公式大全
  21. 网站图片自动轮换怎么做的山西优化公司
  22. 网站链接分析seo快速整站上排名教程
  23. 勒流网站建设百度搜索一下百度
  24. 大连专业手机自适应网站制作登封网络推广公司
  25. 广告公司有什么业务seo关键词排名优化系统源码
  26. 建造师信息查询网郑州seo优化
  27. discuz做资讯网站合适吗百度导航官网
  28. 青岛企业如何建网站一个新手怎么去运营淘宝店铺
  29. 怎样做外贸网站软件开发工资一般多少
  30. 潍坊seo招聘聊城seo整站优化报价