LeetCode--Remove Duplicates from Sorted List、Remove Duplicates from Sorted List II解題分析

850 ワード

問題の説明:並べ替えられた配列の同じ要素を除去し、各要素が1回しか現れず、新しい配列の長さを返します.各要素が最大2回まで現れることを許可したら、新しい配列の長さを返しますか?
解題分析:配列が順序付けされていることを明確に説明するため、各要素に一度だけ出現させる場合、2つの変数を宣言すると、下付き文字はi=0、j=1から始まり、jが指す要素がiが指す要素と同じであれば、j+、そうでなければ++iが位置する要素はj位置の要素に等しく、jが完全な配列を遍歴するまで、配列処理は完了する.新しい配列の長さはi+1です
int removeDuplicates(int[] nums) {
	if(nums.length < 1)//       1         
		return nums.length;
	
	int index = 0;
	for(int i=1; i<nums.length; i++){
		if(nums[index] != nums[i]){
			nums[++index] = nums[i];
		}
	}
	
	return index+1;
}

各要素が最大2回まで発生することを許可する場合、上記の処理方法とはあまり差がありません.
 
int removeDuplicates(int[] nums) {
	if(nums.length < 2)
		return nums.length;
	
	int index = 2;
	for(int i=2; i<nums.length; i++){
		if(nums[i] != nums[index-2])
			nums[index++] = nums[i];
	}

	return index;
}