算法题:
- 链接: https://leetcode-cn.com/problems/max-chunks-to-make-sorted-ii/
- 描述及示例 ```javascript 1.这个问题和“最多能完成排序的块”相似,但给定数组中的元素可以重复,输入数组最大长度为2000,其中的元素最大为10**8。 2.arr是一个可能包含重复元素的整数数组,我们将这个数组分割成几个“块”,并将这些块分别进行排序。之后再连接起来,使得连接的结果和按升序排序后的原数组相同。 3.我们最多能将数组分成多少块? //示例1 输入: arr = [5,4,3,2,1] 输出: 1 解释: 将数组分成2块或者更多块,都无法得到所需的结果。 例如,分成 [5, 4], [3, 2, 1] 的结果是 [4, 5, 1, 2, 3],这不是有序的数组。
// 示例2 输入: arr = [2,1,3,4,4] 输出: 4 解释: 我们可以把它分成两块,例如 [2, 1], [3, 4, 4]。 然而,分成 [2, 1], [3], [4], [4] 可以得到最多的块数。
- 答案```javascriptvar maxChunksToSorted = function(arr) {const sortArr = [...arr]sorted.sort((a, b) => a - b);console.log('sortArr',sortArr)let count = 0;let sortSum = 0;let arrSum = 0;for (let i = 0,len=arr.length;i<len;i++ ) {sortSum +=sortArr[i]arrSum += arr[i]if (sortSum===arrSum) {count++sortSum = arrSum = 0}}return count};
解题思路
链接:https://bigfrontend.dev/zh/problem/implement-your-own-URLSearchParams
- 题目:你能否自己实现一个和URLSearchParams基本一样的MyURLSearchParams?
解题
class MyURLSearchParams {/*** @params {string} init*/constructor(init) {this.params = init.replace(/^\?/,'').split('&').map(item=>item.split('='))}/*** @params {string} name* @params {any} value*/append(name, value) {this.params.push([name,String(value)])}/*** @params {string} name*/delete(name) {this.params = this.params.filter((item) => item[0] !== name)return null}/*** @returns {Iterator}*/*entries() {for (let i=0,len=this.params.length;i<len;i++) {yield [this.params[i][0],this.params[i][1]]}}/*** @param {(value, key) => void} callback*/forEach(callback) {for (let i=0,len=this.params.length;i<len;i++) {callback.apply(this,[this.params[i][1],this.params[i][0]])}}/*** @param {string} name* returns the first value of the name*/get(name) {let tmp = []for (let i=0,len=this.params.length;i<len;i++) {if (name === this.params[i][0]) {tmp.push(this.params[i][1])}}return tmp[0] || null}/*** @param {string} name* @return {string[]}* returns the value list of the name*/getAll(name) {let tmp = []for (let i=0,len=this.params.length;i<len;i++) {if (name === this.params[i][0]) {tmp.push(this.params[i][1])}}return tmp}/*** @params {string} name* @return {boolean}*/has(name) {for (let i=0,len=this.params.length;i<len;i++) {if (name === this.params[i][0]) {return true}}return false}/*** @return {Iterator}*/*keys() {for (let i=0,len=this.params.length;i<len;i++) {yield [this.params[i][0]]}}/*** @param {string} name* @param {any} value*/set(name, value) {const exists = this.params.some((param) => {if (param[0] !== name) return falseparam[1] = String(value)return true})if (!exists) {this.append(name, value)}}// sor all key/value pairs based on the keyssort() {this.params.sort((a, b) => {if (a[0] > b[0]) return 1if (a[0] < b[0]) return -1return 0})}/*** @return {string}*/toString() {return this.params.map(item=>item.join('=')).join('&')}/*** @return {Iterator} values*/values() {let tmp = []for (let i=0,len=this.params.length;i<len;i++) {tmp.push( this.params[i][1])}return tmp}}
遇到的问题
- 知道迭代器这个东西,但是要到返回值的时候不知道怎么写
- get 返回值考虑不充分,没有考虑没有值的情况
- sort 掌握不够熟练
