Java - Arraylist的.get和.remove的大O?

时间:2017-05-25 03:58:13

标签: java arraylist

我假设ArrayList.get和ArrayList.remove都有一个大的O(n)正确吗?

因此,我的下面代码的时间复杂度为O(n ^ 2),对吗?

@Test
public void testCreatUser_success(){
    User user = new User();     

    UserPk userPk = new UserPk();
    userPk.setUserName("User2");

    user.setUserPk(userPk);     
    user.setUserAge(30);

    userRepository.save(user);      
}

免责声明:我只是练习面试,这不是作业或作业。如果您想练习这个问题,可以去interviewbit.com

1 个答案:

答案 0 :(得分:0)

首先,我总是喜欢编程到List界面;在公共方法签名中直接代替ArrayList加倍。您可以从右侧开始,而不是从左侧迭代值。这是O(n)但包含嵌套循环。一旦只是从右边复制,直到你点击9 然后0,一直运行直到当前值不是return。像,

public static List<Integer> plusOne(List<Integer> a) {
    List<Integer> b = new ArrayList<>();
    for (int i = a.size() - 1; i >= 0; i--) {
        int val = a.get(i);
        if (val == 9) {
            b.add(0, 0);
            continue;
        }
        b.add(0, val + 1);
        while (i > 0 && (val = a.get(--i)) != 0) {
            b.add(0, val);
        }
        return b;
    }
    b.add(0, 1);
    return b;
}