博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ARTS打卡第13周
阅读量:5037 次
发布时间:2019-06-12

本文共 1662 字,大约阅读时间需要 5 分钟。

A:Beautiful Arrangement II    Medium

题目:Given two integers n and k, you need to construct a list which contains n different positive integers ranging from 1 to n and obeys the following requirement: 

Suppose this list is [a1, a2, a3, ... , an], then the list [|a1 - a2|, |a2 - a3|, |a3 - a4|, ... , |an-1 - an|] has exactly k distinct integers.

If there are multiple answers, print any of them.  The n and k are in the range 1 <= k < n <= 10^4.

题意:给定两个整数n和k,要求我们返回一个数组,数组长度为n,元素是从1到n的不同整数,要求满足相邻两个元素的差的绝对值有K种情况,存在多种结果,输出其中一种,

n和k满足1 <= k < n <= 10^4.

思路:

一种是差异值以k为标准为1到k,优先确认数组前面n-k个元素,1,2,3,4,....,n-k,剩余的k-1个元素满足差异值分别是k,k-1,k-2,....1, 元素是n,n-k-1,n-1,n-k-2,n-2,...

一种是差异值以n为标准从n-1,n-2,n-2,...n-k-1 最后的元素的差异值为1,元素的拍了为1,n,2,n-1,3,n-2 ...

方案:以k为差异值标准:

  以n为差异值标准:

R:  <<二叉搜索树>>, 二叉搜索树有着媲美快速排序的速度,同时又能完成插入、删除和查找等动态化的操作,

高效而又易于实现。对应的生成二叉树的时间复杂度是nlogn和快速排序法一样,只有当输入的数组是一个有序数组时,对应的二叉树的深度和生成的时间复杂度会是n^2。

使用随机化算法确认根节点和其他树节点有助于避免这类极端情况的发生,使时间复杂度可以稳定在nlogn。

T:记录一个处理二维数组的边界情况的技巧,无需对当前的节点的周边的八个节点的情况进行逐一判断,代码更为简洁清晰,直接排除四种不合法的位置:

/**

* 进行内部的数据 的处理
* @param nums  数组
* @param x         行
* @param y  列
* @return
*/
private int getSum(int[][] nums,int x,int y){
  int nx = nums.length;
  int ny = nums[0].length;
  int sum = 0;
  //关于二维数组的周边存在的元素的数量
  for (int i = -1; i <= 1; i++) {
    for (int j = -1; j <= 1; j++) {
      //数据不合法
      if (x + i < 0 || x + i >= nx || y + j < 0 || y + j >= ny) {
        continue;
      }
      sum += nums[x + i][y + j];
    }
  }
  return sum;
}

S:分享王铮的《如何权衡选择使用哪种数据结构和算法》,并不是盲目的追求最快的高级的算法,需要根据数据规模和业务场景,

可维护性等方面来进行综合的统筹考虑,通常的业务场景,数据的规模不大,高级算法和暴力破解的效率是接近的,

而且暴力破解的简单算法的课维护性会更高,需要根据情况来讨论,不能盲目求快。

转载于:https://www.cnblogs.com/wujunjie-Blog/p/11033033.html

你可能感兴趣的文章
UCOS2_STM32F1移植详细过程(三)
查看>>
Alpha 冲刺 (5/10)
查看>>
[原创]浅谈移动互联网App兼容性测试
查看>>
推荐一款移动端天气App即刻天气
查看>>
数论整理
查看>>
基于FPGA的数字秒表(数码管显示模块和按键消抖)实现
查看>>
Mysql之执行计划
查看>>
propertychange事件导致的IE浏览器堆栈溢出
查看>>
硬链接与软链接
查看>>
Sigar使用
查看>>
cognos安装 win7+Sqlserver08SP1
查看>>
selenium+python自动化测试--数据驱动
查看>>
Struts2 表单标签
查看>>
chrome扩展程序开发
查看>>
图片滚动懒加载用jquery-lazyload 与手动Jquery 写
查看>>
如何用crontab运行一个图形化界面的程序
查看>>
PHP高级面试题
查看>>
java基础之常用类的方法
查看>>
Linux服务之nginx服务篇三(反向代理、负载均衡)
查看>>
tcp协议四次握手
查看>>