TypeScript 及算法准备
创始人
2024-11-14 12:34:23
TypeScript 基础
  1. 类型注解:为变量、函数参数和返回值指定类型。

    typescript复制代码let count: number = 10;  function greet(name: string): string {   return `Hello, ${name}!`; }
  2. 接口和类型别名:定义对象结构和复杂类型。

    typescript复制代码interface User {   id: number;   name: string; }  type ID = number | string;
  3. 泛型:创建可重用的组件。

    typescript复制代码function identity(arg: T): T {   return arg; }  let output = identity("Hello");
  4. 类和接口:面向对象编程。

    typescript复制代码class Animal {   name: string;   constructor(name: string) {       this.name = name;   }   move(distance: number = 0) {       console.log(`${this.name} moved ${distance}m.`);   } }  interface Flying {   fly(distance: number): void; }  class Bird extends Animal implements Flying {   fly(distance: number) {       console.log(`${this.name} flew ${distance}m.`);   } }

算法准备:数组扁平化

数组扁平化是指将多维数组转换为一维数组。以下是几种实现方式:

  1. 使用递归

    typescript复制代码function flattenArray(arr: any[]): any[] {   let result: any[] = [];   for (let item of arr) {       if (Array.isArray(item)) {           result = result.concat(flattenArray(item));       } else {           result.push(item);       }   }   return result; }  console.log(flattenArray([1, [2, [3, 4]], 5])); // [1, 2, 3, 4, 5]
  2. 使用reduce和递归

    typescript复制代码function flattenArray(arr: any[]): any[] {   return arr.reduce((acc, val) => Array.isArray(val) ? acc.concat(flattenArray(val)) : acc.concat(val), []); }  console.log(flattenArray([1, [2, [3, 4]], 5])); // [1, 2, 3, 4, 5]
  3. 使用栈

    typescript复制代码function flattenArray(arr: any[]): any[] {   const stack = [...arr];   const result: any[] = [];   while (stack.length) {       const next = stack.pop();       if (Array.isArray(next)) {           stack.push(...next);       } else {           result.push(next);       }   }   return result.reverse(); }  console.log(flattenArray([1, [2, [3, 4]], 5])); // [1, 2, 3, 4, 5]

算法题:两个有序数组合并成一个有序数组

合并两个有序数组并保持有序,可以使用双指针法。

typescript复制代码function mergeSortedArrays(arr1: number[], arr2: number[]): number[] {   let i = 0, j = 0;   const result: number[] = [];    while (i < arr1.length && j < arr2.length) {       if (arr1[i] < arr2[j]) {           result.push(arr1[i]);           i++;       } else {           result.push(arr2[j]);           j++;       }   }    // 处理剩余元素   while (i < arr1.length) {       result.push(arr1[i]);       i++;   }    while (j < arr2.length) {       result.push(arr2[j]);       j++;   }    return result; }  // 测试 const arr1 = [1, 3, 5, 7]; const arr2 = [2, 4, 6, 8]; console.log(mergeSortedArrays(arr1, arr2)); // [1, 2, 3, 4, 5, 6, 7, 8]

相关内容

热门资讯

裸辞做“一人公司”,我后悔了 去年这个时候,一位以色列程序员正在东南亚旅行。他顺手把一个在脑子里转了很久的想法做成了产品,一个让任...
南京建成国内首个Pre-6G试... 4月21日,2026全球6G技术与产业生态大会在南京开幕。全息互动技术展台前,一名远在北京的工作人员...
超梵求职受邀参加“2025抖音... 超梵求职受邀参加“2025抖音巨量引擎成人教育行业生态大会”,探讨分享优质内容传播,服务万千学员。 ...
摩托罗拉Razr 2026(R... IT之家 4 月 22 日消息,摩托罗拉宣布新一代 Razr 折叠手机将于 4 月 29 日在美国发...
库克卸任,特纳斯领航:苹果新纪... 苹果首席执行官蒂姆·库克将卸任,硬件工程主管约翰·特纳斯将接任,苹果公司今天宣布此事。 库克将在夏季...