时间复杂度和空间复杂度相关示例

时间复杂度:

例题:找到两个有序数组(链表)的公共部分。数组1的长度为n,数组2的长度为m。
方法1:遍历数组1,每个数都去数组2中遍历,时间复杂度为O(nm);
方法2:由于两个数组有序,所以遍历数组1,去数组2中二分法查找,时间复杂度为O(n
logm)。
(二分法的时间复杂度为logn)
方法3:准备两个指针,分别指向两个数组的头部,比较两个指针所指元素的大小,谁小谁向前走,遇到相等就打印,然后两个指针共同向后移动一位,直到其中一个指针走到null。时间复杂度为O(n+m).
方法1的复杂度最高,但是方法2和方法3的优劣需要具体考虑数据量的情况。比如n=4,m=232,此时方法2的复杂度优于方法3.

空间复杂度:

空间复杂度一般指的是额外空间复杂度。输入和输出不占空间,额外空间指的是为了实现该功能所需要的辅助空间

例题:将数组12345 67调整为67 12345,也就是将数组分为两部分,实现一个功能使两不部分交换位置。
方法1:
额外准备一个数组,数组长度为原数组的长度,先把后半部分放入辅助数组中,再将前半部分放入辅助数组中,然后将辅助数组复制进原数组输出。
该方法需要准备一个辅助数组,因此空间复杂度为O(n)
方法2:
先将前半部分逆序,再将后半部分逆序,然后将整体逆序。逆序的方法是准备两个指针分别指向头跟尾,然后互相交换,然后指针分别向中间移动,直到碰到一起或者错过。
由于该方法不需要额外空间,只在原数组上进行操作,因此空间复杂度为O(1).

最优解:先满足时间复杂度最低的情况下,满足空间复杂度最低。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值