第一题
class Solution {
public int majorityElement(int[] nums) {
Arrays.sort(nums);
int n=nums.length;
int num=0;
for(int i=0;i<nums.length;i++){
int j=0;
int count=0;
while(j<nums.length){
if(nums[i]==nums[j]){
count++;
if(count>n/2){
num=nums[i];
}
}
j++;
}
}
return num;
}
}
思路:遍历数组的每一个元素,然后将所有元素与此元素对比,如果相等,count加一,当count大于n/2时,返回此元素。重复元素所得的count值是相等的,所以不用考虑重复带来的影响。
第二题
class Solution {
public int findPairs(int[] nums, int k) {
int count=0;
Arrays.sort(nums);
for(int i=0;i<nums.length;i++){
if(i==0||nums[i]!=nums[i-1]){
for(int j=0;j<nums.length;j++){
if(j==0||nums[j]!=nums[j-1]){
if(i!=j&&nums[i]-nums[j]==k){
count++;
}
}else if(k==0&&(nums[j]!=nums[j+1]||j==nums.length-1)){
if(i!=j&&nums[i]-nums[j]==k){
count++;
}
}
}
}
}
return count;
}
}
思路:首先将数组排序,遍历两次数组,当i=0,并且i!=j时,比较nums[i]-nums[j]==k是否成立,成立的话count加1。当i!=0,nums[i]!=nums[i-1]时,j==0||nums[j]!=nums[j-1]成立时,再次判断。但是还是有些漏洞,当k==0时,nums[j]!=nums[j+1]||j==nums.length-1满足时再进行判断。
第三题
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
//在此输入您的代码...
int count=0;
for(int a=1;a<2019/2;a++){
for(int b=a+1;b<2019;b++){
int c=2019-a-b;
if((a<b)&&(c>b)){
if(isF(a)&&isF(b)&&isF(c)){
count++;
}
}
}
}
System.out.println(count);
scan.close();
}
public static boolean isF(int n){
int x=n;
while(x>0){
if(x%10==2||x%10==4){
return false;
}
x=x/10;
}
return true;
}
}
思路:写双层循环,得出a,b两个加数,再用2019-a-b得到第三个加数c,为了保证三个数只有一种排列,令a<b<c。然后判断三个加数是否满足条件,若满足,count加一。