一、手写算法
https://leetcode-cn.com/problems/max-chunks-to-make-sorted-ii/
思路
每一个分块和排序后的数组中对应的分块数字是一样的,只是排序不同。
代码
/*** @param {number[]} arr* @return {number}*/var maxChunksToSorted = function(arr) {const sorted = [...arr];sorted.sort((a, b) => a - b);let count = 0,sum1 = 0,sum2 = 0;for (let i = 0; i < arr.length; i++) {sum1 += arr[i];sum2 += sorted[i];if (sum1 === sum2) {count++;}}return count;};
复杂度分析
时间复杂度:
- 空间复杂度:
二、编程题
// 手写题:https://bigfrontend.dev/zh/problem/implement-your-own-URLSearchParams
class MyURLSearchParams {/*** @params {string} init*/constructor(init) {this.initParams = init.split('?')[init.split('?').length-1];this.params = []this.initParams.split('&').forEach((item,index)=>{const [key,value] = item.split('=');this.params[index] = {name:key,value};})}/*** @params {string} name* @params {any} value*/append(name, value) {var val = value === undefined ? 'undefined' : value === NaN ? 'NaN' : value.toString()return this.params[this.params.length] = {name:name,value:val}}/*** @params {string} name*/delete(name) {return this.params = this.params.filter((item)=>{if(name !== item.name){return item.value}})}/*** @returns {Iterator}*/entries() {var items = [];this.params.forEach(function(item) {items.push([item.name, item.value]);});var iterator = {next: function() {var value = items.shift();return {done: value === undefined, value: value};}};if (Symbol.iterator) {iterator[Symbol.iterator] = function() {return iterator;};}return iterator;};makeIterator() {let nextIndex = 0;let that = this;return {next: function () {return nextIndex < that.params.length? { value:[that.params[nextIndex++].name,that.params[nextIndex++].value],done: false} : {done: true};}};}/*** @param {(value, key) => void} callback*/forEach(callback) {for(var i = 0; i<= this.params.length - 1; i++){callback(this.params[i].value,this.params[i].name)}}/*** @param {string} name* returns the first value of the name*/get(name) {return this.getAll(name).length > 0 ?this.getAll(name)[0] :null}/*** @param {string} name* @return {string[]}* returns the value list of the name*/getAll(name) {var all = this.params.filter((item)=>{if(name.split('?')[name.split('?').length - 1] === item.name){return item.value}})return all.map((item) => {return item.value})}/*** @params {string} name* @return {boolean}*/has(name) {var flag = false;for(var i = 0; i<= this.params.length - 1; i++){if(name === this.params[i].name){flag = true;return flag;}}return flag;}/*** @return {Iterator}*/keys() {return this.params.map((item) => {return item.name})}/*** @param {string} name* @param {any} value*/set(name, value) {if(this.has(name)){this.params.forEach((item,index)=>{if(name === item.name){console.log(value instanceof Object)if(value instanceof Object){this.params[index] = {name,value:value.toString()}}else{this.params[index] = {name,value:value.toString()}}}})}else{this.append(name,value)}console.log('this.params',this.params)}// sor all key/value pairs based on the keyssort() {this.params = this.params.sort((a, b) => a.name < b.name ? -1 : a.name > b.name ? 1 : 0);console.log(this.params)}/*** @return {string}*/toString() {var str = ''this.params.forEach((item)=>{str = str + `${item.name}=${item.value}&`;})return str.substring(0,str.length-1);}/*** @return {Iterator} values*/values() {return this.params.map((item) => {return item.value})}}
