рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рдореЗрдВ рдХреНрдпрд╛ рдХреЛрдб рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП

рдЖрдЬ рд╕реБрдмрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рджрд┐рд▓рдЪрд╕реНрдк рдкреЛрд╕реНрдЯ рдерд╛ рдХрд┐ рдЖрдкрдХреЛ рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рдореЗрдВ рдХрд┐рд╕ рдХреЛрдб рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреМрди рд╕реЗ рдХреМрд╢рд▓ рд╣реИрдВред рдкрд░реАрдХреНрд╖рд╛ рдХрд╛ рдХрд╛рд░реНрдп рдпрд╣ рдерд╛ред

рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦреЗрдВ, рдЬреЛ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рдПрдХ рд╕рд░рдгреА рдХреЗ рд▓рд┐рдП, рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рдкрд╛рда рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ:

getRanges([0, 1, 2, 3, 4, 7, 8, 10]); // 0-4,7-8,10 getRanges([4, 7, 10]); // 4,7,10 getRanges([2, 3, 8, 9]); // 2-3,8-9 

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рдкреЛрд╕реНрдЯ рдЕрдм рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ, рдФрд░ рдореИрдВ рдЕрдм рджрд┐рдП рдЧрдП рд╕рдорд╛рдзрд╛рди рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ред рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдорд╛рдзрд╛рди рдЗрддрдирд╛ рд╕реБрдВрджрд░ рдерд╛, рдмрд╕ рдФрд╕рдд рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рдж рдЦрд░рд╛рдм рдкрдардиреАрдп рдерд╛ рдЬреЛ рдкреНрд░рдмрдВрдзрди рджреНрд╡рд╛рд░рд╛ рд╕рдордп рд╕реАрдорд╛ рдХреЗ рдЕрдВрдд рддрдХ рдереЛрдбрд╝рд╛ рдЕрддреНрдпрд╛рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ ред рдпрд╣ рд▓рдЧрднрдЧ рдПрдХрд▓-рдкрдВрдХреНрддрд┐ рд▓реЗрдЦрди-рдХреЗрд╡рд▓ рдкрд░реНрд▓-рд╢реИрд▓реА рдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдереАред

рдФрд░ рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рдХреЛрдб рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХреИрд╕реЗ рдХрд░реЗрдВ? рдПрдХ рдУрд░, рд╡рд╣ рдЙрдореНрдореАрджрд╡рд╛рд░ рдХреЗ рдЙрдЪреНрдЪ рддрдХрдиреАрдХреА рд╕реНрддрд░ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рджреВрд╕рд░реА рдУрд░, рдпрд╣ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рдмрдЬрд╛рдп рд╡рд┐рднрд┐рдиреНрди рд╕реНрддрд░реЛрдВ рдХреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд╕рд╛рде рдЯреАрдо рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдХреБрдЫ рдЧрд▓рддрдлрд╣рдореА рдХреЛ рднреА рджрд░реНрд╢рд╛рддрд╛ рд╣реИред

рдореИрдВрдиреЗ рд▓рдЧрднрдЧ 10 рдорд┐рдирдЯ рдореЗрдВ рдЕрдкрдиреЗ рдирд┐рд░реНрдгрдп рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ред рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

 class Interval { start: number; stop: number constructor(start: number, stop: number) { this.start = start; this.stop = stop; } toString(arr: number[]) { let text: string; text = arr[this.start].toString(); if (this.start < this.stop) { text += '-' + arr[this.stop].toString(); } return text; } } function getRanges(arr: number[]) { // find start-stop intervals in the sequence let intervals : Interval[] = []; let start = 0; for (let i = 1; i < arr.length; i++) { if (arr[i] - arr[i - 1] > 1) { intervals.push(new Interval(start, i - 1)); start = i; } } intervals.push(new Interval(start, arr.length - 1)); // convert intervals to the string let out : String = ""; for (let i = 0; i < intervals.length; i++) { out += intervals[i].toString(arr); if (i < intervals.length - 1) { out += ','; } } console.log(out); } getRanges([0, 1, 2, 3, 4, 7, 8, 10]); // 0-4,7-8,10 getRanges([4, 7, 10]); // 4,7,10 getRanges([2, 3, 8, 9]); // 2-3,8-9 

рдпрд╣рд╛рдБ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдпрд╣ рд╣реИ:

  • рдкрд╣рд▓реЗ рдЪрд░рдг рдореЗрдВ рд╣рдо рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рдПрдХ рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдЕрдВрддрд░рд╛рд▓ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ
  • рджреВрд╕рд░реЗ рдЪрд░рдг рдореЗрдВ рд╣рдо рдЕрдВрддрд░рд╛рд▓ рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдореЗрдВ рдмрджрд▓рддреЗ рд╣реИрдВ

рд▓реЗрдХрд┐рди рдлрд┐рд░ рдореИрдВрдиреЗ рдЗрд╕ рдлреИрд╕рд▓реЗ рдХреЛ рджреЗрдЦрд╛ред рдФрд░ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рднреА рд╕рд╣реА рд▓рдЧ рд░рд╣рд╛ рдерд╛ред рдХреБрдЫ рд╣рдж рддрдХ рдХреНрд░рд┐рдпрд╛, рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЗрдХрд╛рдИ "рдЕрдВрддрд░рд╛рд▓" рд╢реБрд░реВ рдХреА рд╣реИред рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА, рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рдпрд╣ рдирд┐рд░реНрдгрдп рдкрдврд╝рдиреЗ рдФрд░ рд╕рдордЭрдиреЗ рдореЗрдВ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред

рд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ рд╕рд╡рд╛рд▓ рд╣реИред рдУрд▓рдВрдкрд┐рдпрд╛рдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдкреНрд░рд╢рдВрд╕рдХ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдПрдХ рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рдореЗрдВ рдЗрд╕ рдирд┐рд░реНрдгрдп рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛?

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореИрдВ рдЗрд╕ рдЪрд░реНрдЪрд╛ рдХреЛ рдЬрд╛рд░реА рд░рдЦрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред

UPD 1. рдХрд╛рд░реНрдп рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрддред рдЗрдирдкреБрдЯ рд╕рд░рдгреА рдХреНрд░рдордмрджреНрдз рд╣реИред
UPD 2. рдореВрд▓ рдкреЛрд╕реНрдЯ рдлрд┐рд░ рд╕реЗ рдЙрдкрд▓рдмреНрдз рд╣реИ, habr.com/en/post/470407

Source: https://habr.com/ru/post/hi470660/


All Articles