
方法:哈希表(与其说是哈希,其实不如说是集合类,因为所用的方法都是Collection接口自带方法,而set下一般只会用到HashSet,而不会用TreeSet)
java
class Solution {
public int longestConsecutive(int[] nums) {
Set<Integer> num_set = new HashSet<Integer>();
for (int num : nums) {
num_set.add(num);
}//利用Set集合类去重
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;
}
}

方法:双指针
java
class Solution {
public void moveZeroes(int[] nums) {
int n = nums.length, left = 0, right = 0;
while (right < n) {
if (nums[right] != 0) {
swap(nums, left, right);
left++;
}
right++;
}
}
public void swap(int[] nums, int left, int right) {
int temp = nums[left];
nums[left] = nums[right];
nums[right] = temp;
}
}
左指针指向已确定非零元素的下一个索引,右指针一致向右遍历,遇到非零则将其安排到左指针位置,左指针+1。