压缩字符串"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);