当前位置: 首页 > news >正文

力扣面试150(7/150)

6.30 189. 轮转数组

给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。

**我的思路:**把nums[0]的数字放在nums[i]上面,把nums[i]的数字放在nums[0]上面

我的代码:

function rotate(nums: number[], k: number): void {let len = nums.length;let time = 0 ; while(time < k){//    把第一个作为放置数字的地方// 遍历数组for(let i = 1 ; i < len ; i++){// 把nums[0]的数字放在nums[i]上面,把nums[i]的数字放在nums[0]上面let temp = nums[i];nums[i] = nums[0];nums[0] = temp;}time ++;}
};

超出时间限制(内心骂了一万次)

这种方法的时间复杂度是O(n*k),当k较大时会导致时间超限。

官方解答:

  1. 三次反转法:这是最常用的方法,时间复杂度为O(n),空间复杂度为O(1)。

    function rotate(nums: number[], k: number): void {let len = nums.length;k = k % len; // 处理k大于数组长度的情况if (k === 0) return; // 如果k为0,直接返回fanzhuan(nums, 0, len - 1); // 翻转整个数组fanzhuan(nums, 0, k - 1);   // 翻转前k个元素fanzhuan(nums, k, len - 1); // 翻转剩下的元素
    }function fanzhuan(nums: number[], start: number, end: number): void {while (start < end) {let temp = nums[start];nums[start] = nums[end];nums[end] = temp;start++;end--;}
    }
    
  2. 使用额外数组:时间复杂度O(n),空间复杂度O(n)。

    哈哈,js里面如果赋值给nums,会新生成一个数组呢,对原数组没有影响

**总结:**虽然自己的想法时间有点超限,但是已经很好啦!多学学一些其他高校的算法

三次轮转法适用的地方:原地旋转、旋转步数较大、适用于任意旋转步数适、用于任何顺序的数组

6.30 121. 买卖股票的最佳时机

给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。

你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。

返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0

我的思路:

如果是暴力的话,先去找最小的价格,然后再最小的价格后面找最大的价格,两个价格相减

思路:动态地处理max:

因为max必须是大的减去小的,所以先设定一个min为prices[0],遍历价格数组,如果遇到比

min还小的就要更新min,如果是比min大的就要更新max

我的代码:

function maxProfit(prices: number[]): number {let min = prices[0] ; let max = 0 ;let i = 1 ; // 第一遍循环找到最小的价格for(i ;   i < prices.length ; i++){if(prices[i] < min){min = prices[i];}else {max = max > prices[i] - min ? max : prices[i] - min;}}return max  ;
};

总结:代码通过一次遍历数组,不断跟踪最低价格,并计算当天价格与最低价格的差值来更新最大利润。这是一种贪心算法的应用,思路清晰,时间复杂度是O(n),非常高效。

http://www.lqws.cn/news/576145.html

相关文章:

  • 【MySQL】JDBC编程
  • 什么是集装箱残损识别系统?它如何提升港口效率?
  • 【AI时代速通QT】第四节:Windows下Qt Creator调试指南
  • nifi1.28.1集群部署详细记录
  • 【51单片机用数码管显示流水灯的种类是按钮控制数码管加一和流水灯】2022-6-14
  • JavaEE初阶第五期:解锁多线程,从 “单车道” 到 “高速公路” 的编程升级(三)
  • vue-32(部署一个 Nuxt.js 应用程序)
  • 多线程环境下的线程安全资源与缓存池设计:ThreadSafeObject 与 CachePool 实例解析
  • 类图+案例+代码详解:软件设计模式----简单工厂方法、工厂方法、抽象工厂方法
  • 腾讯云实名资质 “待补充后提交” 解决方法
  • 蓝桥杯51单片机设计
  • 青少年编程与数学 02-022 专业应用软件简介 04 矢量图形设计软件:CorelDRAW
  • 华为云Flexus+DeepSeek征文 | Word办公软件接入华为云ModelArts Studio大模型,实现AI智能办公
  • 【Unity】MiniGame编辑器小游戏(七)贪吃蛇【Snake】
  • Rust C++ OpenCV kafka-rs实践
  • 【Wireshark】高级过滤技巧精讲
  • 【c/c++3】类和对象,vector容器,类继承和多态,systemd,stdboost
  • 【c/c++1】数据类型/指针/结构体,static/extern/makefile/文件
  • 利用deepseek学术搜索
  • HTTP中常见的Content-Type
  • [Android]ANR的线程
  • Redis Cluster Gossip 协议
  • C++高效结合主流工具:现代系统底层动力
  • 机电一体化论文写作实战指南:从创新设计到工程验证的完整路径
  • 面试复盘6.0
  • mybatis-plus从入门到入土(一):快速开始
  • Windows安装虚拟机、ROS2
  • 实战四:基于PyTorch实现猫狗分类的web应用【2/3】
  • springboot校园新闻网站
  • 如果将Word里每页的行数设置成50行