11/1

Leetcode 80. Remove Duplicates from Sorted Array II

这里其实也可以用类似于 Remove Duplicates from Sorted Array 中的解法三的模版,由于这里最多允许两次重复,那么当前的数字 num 只要跟上上个覆盖位置的数字 nusm[i-2] 比较,若 num 较大,则绝不会出现第三个重复数字(前提是数组是有序的),这样的话根本不需要管 nums[i-1] 是否重复,只要将重复个数控制在2个以内就可以了,参见代码如下:

 1 class Solution {
 2     public int removeDuplicates(int[] nums) {
 3         int i = 0;
 4         for( int num : nums){
 5             if( i < 2 || num > nums[i-2]){
 6                 nums[i++] = num;
 7             }
 8         }
 9         return i;
10     }
11 }

 299. Bulls and Cows

在处理不是bulls的位置时,我们看如果secret当前位置数字的映射值小于0,则表示其在guess中出现过,cows自增1,然后映射值加1,如果guess当前位置的数字的映射值大于0,则表示其在secret中出现过,cows自增1,然后映射值减1,参见代码如下:

 1 class Solution {
 2     public String getHint(String secret, String guess) {
 3         int bulls =0;
 4         int cows = 0;
 5         int[] numbers = new int[10];
 6         for(int i = 0; i < secret.length(); i++){
 7             if(secret.charAt(i) == guess.charAt(i)) bulls++;
 8             else{
 9                 if(numbers[secret.charAt(i) - '0']++ < 0 ) cows++;
10                 if(numbers[guess.charAt(i) - '0']-- > 0) cows++;
11             }
12         }
13         return bulls + "A" + cows + "B";
14     }
15 }

猜你喜欢

转载自www.cnblogs.com/Afei-1123/p/11779726.html