一个关于时间复杂度问题

问题描述

一个关于时间复杂度问题
 for (int i = 0; i < n; i++) {
    for (int j = 0; j < i; j++) {
    // do something
    }
}

这种我不太清楚,外层循环是n,但是内循环次数是1到n,所以这种算是O(n^2)吗。谢谢

解决方案

一共执行了(1+2+3+...+n-1+n)≈(n^2)/2,因为时间复杂度是不考虑系数的,所以时间复杂度也是O(n^2)

解决方案二:

当n=5时
i:0 1 2 3 4 5

j: 0 0,1 0,1,2 0,1,2,3 0,1,2,3,4

解决方案三:

对,就是O(n^2)

解决方案四:

算O(n^2)吧,1+2+3+4+5+.......+n=n*(n+1)/2

解决方案五:

O(n^2)

时间: 2024-09-23 21:11:30

一个关于时间复杂度问题的相关文章

[算法系列之二十九]Bellman-Ford最短路径算法

单源最短路径 给定一个图,和一个源顶点src,找到从src到其它所有所有顶点的最短路径,图中可能含有负权值的边. Dijksra的算法是一个贪婪算法,时间复杂度是O(VLogV)(使用最小堆).但是迪杰斯特拉算法在有负权值边的图中不适用,Bellman-Ford适合这样的图.在网络路由中,该算法会被用作距离向量路由算法. Bellman-Ford也比迪杰斯特拉算法更简单和同时也适用于分布式系统.但Bellman-Ford的时间复杂度是O(VE),这要比迪杰斯特拉算法慢.(V为顶点的个数,E为边的

排序算法——快速排序

今天介绍快速排序,这也是在实际中最常用的一种排序算法,速度快,效率高.就像名字一样,快速排序是最优秀的一种排序算法. 思想 快速排序采用的思想是分治思想. 快速排序是找出一个元素(理论上可以随便找一个)作为基准(pivot),然后对数组进行分区操作,使基准左边元素的值都不大于基准值,基准右边的元素值 都不小于基准值,如此作为基准的元素调整到排序后的正确位置.递归快速排序,将其他n-1个元素也调整到排序后的正确位置.最后每个元素都是在排序后的正 确位置,排序完成.所以快速排序算法的核心算法是分区操

[经典面试题][腾讯]集合差集

[题目] A.B两个整数集合,设计一个算法求他们的交集,尽可能的高效. [来源] 腾讯2014校招软件开发笔试题目 [思路一] 对集合A和集合B进行排序(升序,用快排,平均复杂度O(N*logN)). 设置两个指针p和q,同时指向集合A和集合B的第一个元素(已经升序排序).用一个容器vector记录集合的交集. 如果两个元素大小相等的,说明是集合交集元素,加入交集vector中: 如果两个元素大小不相等的,p和q中较小值的指针,指向下一个元素. 依次操作,直到其中一个集合没有元素可比较为止. 排

程序中的得与失

俗话说,舍得,有舍便有得,程序或许和世间万物一个样,讲究阴阳平衡.或许您写程序过程中,得到一颗歪脖树,却放弃了一大片大森林,能正确的取舍矛盾体双方的关系,或许是您扎实功底的体现,当然这必须需要一种日积月累的过程.下面我就说一些程序的矛盾体,起一个抛砖引玉的作用. 一.时间与空间 程序中存储空间与时间,自古就是天敌一枚,自古就是有我没他,有他没我的局面.这对天敌关系处理,令无数英雄竞折腰. 弄清楚他们之间关系,让我们从空间与时间观点,从辩证唯物主义思想来分析程序. 我们知道一个程序分为几个层次,每

线性链表其他种类(静态,双向,循环)的存储结构和常见操作

一.静态单链表 在不支持动态空间分配的环境中,要使用链表存储数据,那么可采用静态链表的方法:即在一块预分配的存贮空间中,用下标作为指针链来构成链式结构. //既然是静态链表,那么可以使用一维数组实现存储,java没有指针,那么就用这来使用链表结构 //在不支持动态空间分配的环境中,要使用链式结构技术,可采用静态链表的方法:即在一块预分配的存贮空间中,用下标作为指针. //存储结构:在数组中增加一个"指针"域,存放下一元素在数组中的下标.且0为代表空指针   //设S为SLinkList

JDK源码分析-ArrayList分析

花了两个晚上的时间研究了一下ArrayList的源码, ArrayList 继承自AbstractList 并且实现了List, RandomAccess, Cloneable, Serializable 通过实现这三个接口 就具备了他们的功能 RandomAccess 用来表明其支持快速(通常是固定时间)随机访问 Cloneable可以克隆对象 Serializable 对象序列化就是把一个对象变为二进制的数据流的一种方法,通过对象序列化可以方便地实现对象的传输和存储,Serializable

ArrayList和LinkedList的几种循环遍历方式及性能对比分析

主要介绍ArrayList和LinkedList这两种list的五种循环遍历方式,各种方式的性能测试对比,根据ArrayList和LinkedList的源码实现分析性能结果,总结结论. 通过本文你可以了解(1)List的五种遍历方式及各自性能 (2)foreach及Iterator的实现 (3)加深对ArrayList和LinkedList实现的了解. 阅读本文前希望你已经了解ArrayList顺序存储和LinkedList链式的结构,本文不对此进行介绍. 相关:HashMap循环遍历方式及其性

C#数据结构与算法揭秘一

这里,我们 来说一说C#的数据结构了. ①什么是数据结构.数据结构,字面意思就是研究数据的方法,就是研究数据如何在程序中组织的一种方法.数据结构就是相互之间存在一种或多种特定关系的数据元素的集合. 程序界有一点很经典的话,程序设计=数据结构+算法.用源代码来体现,数据结构,就是编程.他有哪些具体的关系了, (1) 集合(Set):如图 1.1(a)所示,该结构中的数据元素除了存在"同属于一个集合"的关系外,不存在任何其它关系. 集合与数学的集合类似,有无序性,唯一性,确定性. (2)

Java中ArrayList和LinkedList的遍历与性能分析_java

前言 通过本文你可以了解List的五种遍历方式及各自性能和foreach及Iterator的实现,加深对ArrayList和LinkedList实现的了解.下面来一起看看吧. 一.List的五种遍历方式 1.for each循环 List<Integer> list = new ArrayList<Integer>(); for (Integer j : list) { // use j } 2.显示调用集合迭代器 List<Integer> list = new Ar