10.11刷题记录

41 阅读1分钟

压缩字符串"aabcccccaaa"为“a2b2c6a8”

主要思路:

初始化一个计数和新字符串,遍历这个字符串,如果str[i]===str[i+1]计数器加一,否则新字符串+=str[i]+count,count=1

要点: 单个字符串拼接直接用newStr+=str[i]


function shortString(str){
    var newStr=''
    var count = 1

    for(let i = 0;i<str.length;i++){
        if(str[i]===str[i+1]){
            count++
        }
        else{
            newStr += str[i]+count
            count = 1
        }
    }
    return newStr.length<str.length?newStr:str
}

var a = "aabcccccaaa"
console.log(shortString(a));

计算平均时间:const arr = ["8:15", "6:35", "11:22"]

主要思路:

计算平均分钟=所有分钟/3,时为平均分钟%60,分为平均分组-时*60。

要点:拆分时分用arr[i].split(":"),转换为数字用parseInt(),最后拼接数字拼接成字符串用newTime.join(":")

newTime[0]=hour,newTime[1]=minute

function countTime(arr){
    var newArr = []
    var totalHour = 0
    var totalMin = 0
    var averMin = 0

    for(let i=0;i<arr.length;i++){
        totalHour += parseInt(arr[i].split(":")[0])
        totalMin += parseInt(arr[i].split(":")[1])
    }
    totalMin += totalHour*60
    averMin = totalMin/arr.length
    
    newArr[0] = (Math.floor(averMin/60))
    console.log(newArr[0]);
    newArr[1] = averMin-newArr[0]*60
    return newArr.join(":")
    
}

const arr = ["8:15", "6:35", "11:22"]
const result = countTime(arr)
console.log(result);

对一个有序数组原地去重

主要思路:

双指针,慢指针指向第一个,快指针指向第二个,快指针参与循环遍历,若快指针的数字与慢指针不同,则慢指针+1,慢指针指向内容换成快指针指向的不同的数字,以此类推,最后慢指针为去重后数组的长度。

function removeDuplicates(nums) {
    if(nums.length==0){
        return nums
    }

    let slow = 0
     for(let fast=1;fast<=nums.length;fast++){
        if(nums[fast]!==nums[slow]){
            slow++
            nums[slow]=nums[fast]
        }
     }
     return slow
  }
  
  // 示例用法
  const nums = [1, 1, 2, 2, 2, 3, 4, 4, 5];
  const length = removeDuplicates(nums);
  
  console.log("去重后的数组:", nums.slice(0, length));
  console.log("数组长度:", length);