学而思 前端笔试
选择题都是一些 机器学的和操作系统的东西。。 感觉很迷。
算法 第一道 AC
package com.company; import java.util.*; public class ListNode { public static void main(String[] args){ Scanner sc = new Scanner(System.in); Set<Integer> set = new HashSet<>(); String rs = ""; while (sc.hasNextInt()){ int tmp = sc.nextInt(); tmp = Math.abs(tmp); if(!set.contains(tmp)){ rs += tmp + " "; set.add(tmp); } } System.out.println(rs); } }第二道,感觉是时间复杂度高了,不记得堆排序咋写了,尴尬。 67%
大概思路 维持一个数组,让数组第一个为改数组的最小值。 不断筛选,等我去看看真正的堆排序咋写再补充一个。
package com.company; import java.util.*; public class dui { public static void main(String[] args){ Scanner sc = new Scanner(System.in); float n = sc.nextFloat(); int[] tmp = new int[(int) Math.floor((Math.ceil(n*0.1*0.01)))]; for (int i=0;i<tmp.length;i++){ tmp[i] = sc.nextInt(); } getMin(tmp); for (int i=tmp.length;i<n;i++){ int in = sc.nextInt(); if (in > tmp[0]){ tmp[0] = in; getMin(tmp); } } for (int i=0;i<tmp.length;i++){ System.out.println(tmp[i]); } } public static void getMin(int[] tmp){ int index = 0; int min = tmp[0]; int tmep = 0; for (int i=0;i<tmp.length;i++){ if (tmp[i] == 0) continue; if (tmp[i] < min){ index = i; min = tmp[min]; } } tmep = min; tmp[0] = min; tmp[index] = tmep; } }