其他分享
首页 > 其他分享> > 每日一算:2021.4.23

每日一算:2021.4.23

作者:互联网

大家好,我是梅巴哥er。今天继续算法的练习。


第3题:无重复字符的最长子串
- 这道题是中等难度,果然感受到了这种难度。思考了好久,一步步修改,才解决。
/**
 * 1,拿出第一个字符,放进数组
 * 2,拿出后面的一个元素 
 * 3,判断这个元素是否和前面的字符相同 且在数组里面是否已经存在
 * 4,如果不同且不存在,就放进数组,继续看后面的元素
 * 5,如果相同或已存在,不放进数组,并从第二个开始
 * 6,以此类推,使用递归
 * 7,准备一个对象,存放这些数组
 * 8,把对象中各个属性的长度,放进一个数组进行排序
 * 9,把长度最大的值找出来,就是结果
 */

function getChildStrLen(str) {
  if(str.length === 0) {
    console.log(0)
  } else if(str.length === 1) {
    console.log(1)
  } else {
    let obj = {}
    for(let i = 0; i < str.length; i++) {
      let arri = 'arr' + i
      obj[arri] = []
    }
    //  console.log(obj)
    let num = 0
    let strLenth = str.length
    function getLongestStr(str) {
      if(num < strLenth) {
        if(str.length === 0){
          return 
        } else if(str.length === 1) {
          obj['arr' + num].push(str[0])
          return 
        } else {
          obj['arr' + num].push(str[0])
          for(let i = 1; i < str.length; i++) {
            if(str[i] !== str[i-1] && !obj['arr' + num].includes(str[i])) {
              obj['arr' + num].push(str[i])
            }
          }
          num++
          getLongestStr(str.slice(1))
        }
      }
    }
    getLongestStr(str)
    let arrLenth = []
    // console.log(obj)
    for(let k in obj) {
      arrLenth.push(obj[k].length)
    }
    let arr = arrLenth.sort((a, b) => b - a)
    console.log(arr[0])
  }
}
// test
let str = 'abcabcbb'
getChildStrLen(str) 
// 输出 3

第4题:寻找两个正序数组的中位数

这道题标注是困难的难度,但是我不明白他困难在哪里,有知道的小伙伴,请告知我一下。。。

/**
 * 1,两个数组合并,
 * 2,从小到大排序,得到一个新数组
 * 3,新数组的长度为length,length如果是0,输出"没有要找的中位数"
 * 4,length如果是1,输出这个新数组的唯一元素即可
 * 5,length大于1,如果length是奇数,那么中位数的下标就是(1+length)/2
 * 6,如果length是偶数,中位数就是length/2和length/2 - 1两个值的平均数
 * 7,输出结果要求保留5位小数,用Math方法的num.toFixed(5)处理一下
 * 8,输出结果
 */
function getMedian(num1, num2) {
  let arr = []
  arr = num1.concat(num2)
  // console.log(arr)
  if(arr.length === 0) {
    console.log('注意:你给的两个数组,不存在合并后的中位数,请检查参数!')
  } else if(arr.length === 1) {
    console.log(arr[0].toFixed(5))
  } else {
    let arr1 = []
    arr1 = arr.sort((a, b) => a - b)
    let length = arr1.length
    if(arr1.length % 2 === 1) {
      let len = (1+length)/2
      console.log(arr1[len].toFixed(5))
    } else {
      console.log(((arr1[length/2] + arr1[length/2 - 1])/2).toFixed(5))
    }
  }
}

// test
let num1 = []
let num2 = []
getMedian(num1, num2)


以上。

标签:arr,console,2021.4,23,每日,length,let,str,obj
来源: https://blog.csdn.net/tuzi007a/article/details/116042937