我假设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
答案 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;
}