摄图网的图片可以做网站吗,wordpress远程,linux中wordpress,wordpress页面加载时间代码我这个方法有点投机取巧了#xff0c;题目说时间复杂度最多O(n),而我调用了Arrays.sort(#xff09;方法#xff0c;他的时间复杂度是n*log(n)#xff0c;但是AC了#xff0c;这样的话这道题还是非常简单的#xff0c;创建一个Hashmap#xff0c;以nums数组的元素作为ke… 我这个方法有点投机取巧了题目说时间复杂度最多O(n),而我调用了Arrays.sort(方法他的时间复杂度是n*log(n)但是AC了这样的话这道题还是非常简单的创建一个Hashmap以nums数组的元素作为key以这个元素是连续序列中的第几个作为value先把数组排一下序然后从第一个开始往后遍历如果map中有nums[i]这个key可以直接跳过看下一个元素如果没有这个key那就看有没有nums[i]-1这个key也就是看nums[i]前面这个数有没有在数组中如果有拿到这个nums[i]-1这个key的value说明nums[i]-1在序列中的第value个那么nums[i]就在序列中的第value1个map.put(nums[i],value1)同时维护一个ans表示数组中最大的序列看看value1是不是比ans大如果是则更新ans。如果map中没有nums[i]-1这个key说明nums[i]前面的序列已经断掉了以num[i]为起点重新建一个序列那么num[i]就是序列中的第1个所以map.put(nums[i],1)以下是我的代码
class Solution {public int longestConsecutive(int[] nums) {if(nums.length 0)return 0;HashMapInteger,Integer map new HashMap();int ans 1;Arrays.sort(nums);for(int i0;inums.length;i){if(map.containsKey(nums[i])){continue;}else{if(map.containsKey(nums[i]-1)){int value map.get(nums[i-1])1;map.put(nums[i],value);if(value ans)ansvalue;}else{map.put(nums[i],1);}} }return ans;}
}
看了一下题解题解用的是Hashset。
class Solution {public int longestConsecutive(int[] nums) {SetInteger num_set new HashSetInteger();for (int num : nums) {num_set.add(num);}int longestStreak 0;for (int num : num_set) {if (!num_set.contains(num - 1)) {int currentNum num;int currentStreak 1;while (num_set.contains(currentNum 1)) {currentNum 1;currentStreak 1;}longestStreak Math.max(longestStreak, currentStreak);}}return longestStreak;}
}
他先把数组中的所有数全放进set里面然后遍历set中的num看看set中有没有num的前1个数num-1如果没有说明num就是一个序列的起点把这个序列的长度先初始为1然后用一个while循环去看看有没有num的下一个数如果有的话序列长度1num变为他的下一个数没有的话循环结束每次循环都更新longestStreak最后返回longestStreak即可。
说实话我看完也有点疑惑外层这个循环已经是O(n)了里面还有一个while循环这不是超了吗好像是for里面只有几个序列的起点会进去然后while里面也只有起点后面的几个数会进去然后时间复杂度是O(2n)也就是O(n)。