import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型一维数组 * @return int整型 */ public int remove_duplicates_v3 (int[] nums) { int n = nums.length; if(n==0){ return 0; } int count = 1; int freq = 1; for (int i = 1; i < n; i++) { if (nums[i] == nums[i - 1]) { freq++; } else { freq = 1; } if(freq > 3) { continue; } nums[count] = nums[i]; count++; } return count; } }
本题知识点分析:
1.数组遍历
2.数学模拟
本题解题思路分析:
1.count是计数器 freq是频率计数器 count表示重新分布后的数组长度 freq表示当前位置上牛群的数量
2.如果元素与前一个相同,频率+1,否则频率置为1,因为不同元素,至少是一个频率,如果freq大于3,说明数量超出限制,跳过该位置,如果freq不超过3,把当前位置元素赋值到新的位置count上,然后count++作为一个慢指针,而i作为一个快指针必须++。
关键点:count什么时候不加,什么时候不做赋值操作,就是牛群数量超过限制的时候,使用continue完美解决