刷题笔记(第六天)

1. 给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。

算法的时间复杂度应该为 O(log (m+n)) 。
输入:nums1 = [1,3], nums2 = [2]
输出:2.00000
解释:合并数组 = [1,2,3] ,中位数 2

var findMedianSortedArrays = function(nums1, nums2) {
    let arr = [...nums1, ...nums2];
    // console.log(arr);
    arr = arr.sort((a,b)=>a-b);
    // console.log(arr);
     if (arr.length % 2 === 0) {
      // 4 1,2
      return ((arr[arr.length / 2] + arr[arr.length / 2 - 1]) / 2).toFixed(5);
    } else {
      return arr[(arr.length - 1) / 2].toFixed(5);
    }
};

思路:将两个数组合并、排序,然后长度分奇偶分别得出结果。

2.给你一个字符串 s,找到 s 中最长的回文子串。

如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。
输入:s = “babad”
输出:“bab”
解释:“aba” 同样是符合题意的答案。

function longestPalindrome(s) {
  let res='';
  for(let i=0;i=0 && r
3. 将数组 arr 中的元素作为调用函数 fn 的参数

解题思路:主要是执行fn函数,并且要将数组作为参数传递给fn,可以考虑使用改变this指向的函数call()、或apply() [之所以不用bind ,是因为bind不能立即执行fn函数],要注意这两种函数的参数形式。





    
    



    
    



4.根据包名,在指定空间中创建对象

输入描述:
namespace({a: {test: 1, b: 2}}, ‘a.b.c.d’)
输出描述:
{a: {test: 1, b: {c: {d: {}}}}}

function namespace(oNamespace, sPackage) {
  let arr = sPackage.split('.');
  arr.forEach(item => {
    if (typeof oNamespace[item] != 'object') {
      oNamespace[item] = {};
      
    }
    oNamespace = oNamespace[item]
  })
}
5.如果第二个参数 bUnicode255For1 === true,则所有字符长度为 1;否则如果字符 Unicode 编码 > 255 则长度为 2

str.charCodeAt(index)方法,str是字符串,index是索引,该方法返回指定索引字符的unicode编码.
输入:‘hello world, 牛客’, false
输出:17

function strLength(s, bUnicode255For1) {
 if (bUnicode255For1 === true) {
   return s.length;
 } else {
   let a = 0;
   for (let i = 0; i < s.length; i++) {
     if (s.charCodeAt(i) > 255) {
       a += 2;
     } else {
       a += 1;
     }
   }
   return a;
 }
}
6.实现函数 callIt,调用之后满足如下条件:

1、返回的结果为调用 fn 之后的结果
2、fn 的调用参数为 callIt 的第一个参数之后的全部参数
var fruits = [“Banana”, “Orange”, “Lemon”, “Apple”, “Mango”];
var myBest = fruits.slice(-3,-1); // 截取倒数第三个(包含)到倒数第一个(不包含)的两个元素
var myBest = fruits.slice(-3); // 截取最后三个元素
数组截取指定位置的元素:arr.slice(start[,end])
var f = ['b','a','c','d']; f.slice(-3,-1) // 截取倒数第三个(包含)到倒数第一个(不包含)的两个元素

        function callIt(fn) {
            let r=[...arguments];
            r = r.slice(1)
            return fn.apply(null,r)
        }
7.获取数字 num 二进制形式第 bit 位的值。注意:

1、bit 从 1 开始
2、返回 0 或 1
3、举例:2 的二进制为 10,第 1 位为 0,第 2 位为 1

function valueAtBit(num, bit) {
    let n = num.toString(2);
    let s = parseInt(n.charAt(n.length - bit))
    return s;
}

toString() 方法可把一个Number对象转换为一个字符串,并返回结果。
NumberObject.toString(radix),radix 可选。规定表示数字的基数,是 2 ~ 36 之间的整数。若省略该参数,则使用基数 10。num.toString(2)将num转换为二进制
数字的字符串表示。例如,当 radix 为 2 时,NumberObject 会被转换为二进制值表示的字符串。
实例:

var number = new Number(1337);
console.log(number.toString()) // 1337
console.log(number.toString(2)) // 10100111001

你可能感兴趣的:(笔记,javascript)