交流百度编程第一题,求教有哪些冗余的地方

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Scanner;

/**
 *
 * @author psxjo
 */
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int N =in.nextInt();
        if(N<3){ //判断,小于3个数,直接输出
            System.out.println("-1");
        }
        else{
            int[] prices = new int[N];
            for(int i=0;i<N;i++){
                prices[i]=in.nextInt();
            }
            Arrays.sort(prices);
           ArrayList<Integer> ans = new ArrayList<Integer>();
           for(int i=0;i<N;i++){
               if(!ans.contains(prices[i])){
                   ans.add(prices[i]);  //判断AL是否存在,如果不存在,加入
               }
           }
           if(ans.size()<3){
               System.out.println(-1);//如果AL小于3个,输出-1
           }
           else{
               System.out.println(ans.get(2));//直接拿出来第3个
           }
            
        }
    }
}
AC了,但是感觉写的一般,大家有啥其他比较好的思路吗?#百度#
全部评论
其实可以先放到set里面 然后排序 取第三个
点赞 回复 分享
发布于 2017-04-28 11:16
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> #define N 256 int comp(const void*a, const void*b) { return *((int *)a) - *((int *)b); } int find_kth_num(int nums[N], int length, int k) { int counts[1001]; int sum = 0; int i; memset(counts, 0, 1001 * sizeof(int)); qsort(nums, length, sizeof(int), comp); for (i = 0; i < length; i++) { sum += (counts[nums[i]] == 0); counts[nums[i]] = 1; if (sum == k) { return nums[i]; } } return -1; } int main() { int n = 0; int i; int nums[N]; scanf("%d", &n); for (i = 0; i < n; i++) { scanf("%d", nums + i); } printf("%d", find_kth_num(nums, n, 3)); return 0; }
点赞 回复 分享
发布于 2017-04-28 11:07
ArrayList<Integer> ans = new ArrayList<Integer>(); for(int i=0;i<N;i++){ if(!ans.contains(prices[i])){ ans.add(prices[i]); } } 当输入全不同的话,你这里的时间复杂度是O(n^2),没必要这么写。
点赞 回复 分享
发布于 2017-04-28 11:17
import java.util.Scanner; import java.util.Set; import java.util.TreeSet; /** * Created by dean on 2017/4/27. */ public class Main { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int n = scan.nextInt(); Set<Integer> set = new TreeSet<>(); for (int i = 0; i < n; ++i) { set.add(scan.nextInt()); } int p = 0; for (int num : set) { p++; if (p == 3) { System.out.println(num); break; } } if (p < 3){ System.out.println(-1); } } }
点赞 回复 分享
发布于 2017-04-28 11:23
感觉排除重复的写的不好,直接在输入时用set会方便很多吧。
点赞 回复 分享
发布于 2017-04-28 11:40
去重用set比较好
点赞 回复 分享
发布于 2017-04-28 11:43

相关推荐

头像
10-15 22:27
已编辑
门头沟学院 C++
罗格镇的小镇做题家:我投了hr打电话来说学历太低了不符合要求,建议投荣耀,结果荣耀也投了一定水花没有,非本211硕
投递华为等公司10个岗位
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务