算法

  1. 这是一个函数条件二分
  2. 先对 nums 进行排序,这样就可以求出最大距离 right = nums[len - 1] - nums[0] 和最小的距离 left=0
  3. 使用二分法,设置一个中间值 mid,找出小于等于 mid 的距离对数量 count
  4. 比对count 和 k,如果 count < k, 证明第 k 小的距离值比 mid 大,所以 left = mid + 1
  5. 如果count === k 的时候,由于找的是第 k 小,所以可能存在值小于 mid,但是 count 也等于 k 的情况,所以也要归咎于 right = mid-1
  6. 最后 返回 left

截屏2022-06-15 11.15.03.png

二维矩阵

截屏2022-06-15 23.13.04.png

  1. /**
  2. * @param {number} n
  3. * @return {number[][]}
  4. */
  5. var generateMatrix = function(n) {
  6. let [startX, startY] = [0, 0];
  7. let loop = n >> 1; // 旋转圈数
  8. let mid = n >> 1; // 中间位置需要单独处理
  9. let res = new Array(n).fill(0).map(() => new Array(n).fill(0));
  10. let newNum = 1; // n 在每一层需要减去的数字
  11. let count = 1;
  12. while(loop--){
  13. let row = startX, col = startY;
  14. // 上,左闭右开
  15. for(; col < startY + n - newNum; col++){
  16. res[row][col] = count;
  17. count++;
  18. }
  19. // 右,左闭右开
  20. for(; row < startX + n - newNum; row++){
  21. res[row][col] = count;
  22. count++;
  23. }
  24. // 下,左闭右开
  25. for(; col > startY; col--){
  26. res[row][col] = count;
  27. count++;
  28. }
  29. // 左,左闭右开
  30. for(; row > startX; row--){
  31. res[row][col] = count;
  32. count++;
  33. }
  34. // 更新
  35. startX++, startY++;
  36. newNum += 2;
  37. }
  38. // 奇数处理
  39. if(n % 2 !== 0){
  40. res[mid][mid] = count;
  41. }
  42. return res;
  43. };

image.png

加减计算器

  1. class Calculate {
  2. constructor(value) {
  3. this.value = value;
  4. }
  5. add(value) {
  6. this.value += value;
  7. return this;
  8. }
  9. subtract(value) {
  10. this.value -= value;
  11. return this;
  12. }
  13. result() {
  14. return this.value
  15. }
  16. }
  17. const cal = new Calculate(50);
  18. console.log(cal.add(1).subtract(5).add(1000).subtract(5000).result());
  19. // 结果是-3954

富文本编辑器项目

https://codingartistweb.com/2022/04/rich-text-editor-with-javascript/
备注:今天下午去体测了 然后就去打球了,没有学习