首页 > 代码库 > 2017百度web前端实习生在线笔试题

2017百度web前端实习生在线笔试题

技术分享

代码:

 1 import java.util.Scanner;
 2 
 3 public class Main {
 4     public static void main(String[] args) {
 5         Scanner sc = new Scanner(System.in);
 6         int n = sc.nextInt();
 7         int num[]=new int[n];//用户输入的数组
 8         int b[]=new int[n];//复制num
 9         int c[]=new int[n];//依次保存最小值下标(第1小、第2小、第3小...)
10         
11         for(int i=0;i<n;i++){
12             num[i]=sc.nextInt();
13         }
14         for(int i=0;i<n;i++)
15         {
16             b[i]=num[i];
17         }
18         //num排序 升序
19         int temp;
20         for(int i=0;i<n;i++){
21             for(int j=i;j<n;j++){
22                 if(num[i]>num[j]){
23                     temp=num[j];
24                     num[j]=num[i];
25                     num[i]=temp;
26                 }
27             }   
28         }
29         //找到每个最小值下标
30         int i=0,j=0,k=0;
31         while(true){
32             if(num[i]==b[j]){
33                 c[k]=j;
34                 i++;
35                 k++;
36                 j=0;
37             }
38             else{
39                 j++;
40             }
41             if(k==n){
42                 break;
43             }
44         }
45         //计算结果
46         for(int m=0;m<n-1;m++){
47             if(c[m]>c[m+1]){
48                 System.out.println(n-(m+2)+1);
49                 break;
50             }
51         }
52     }
53 }

思路:主要是找规律,我找了好长时间,发现了规律。

假设数组长度n,第x小值位置在第x-1小值位置前面,就开始移动,则最少操作次数为:n-x+1

举例:

(1):数组长度为4 ,值分别是 19 7 8 25。最少操作次数:4-3+1=2

(2):数组长度为6 ,值分别是 19 8 7 9 10 25。最少操作次数:6-2+1=5

第(1)个例子,最小值是7,第二小是8,第三小是19。8在7后面,不移动8,19在8前面,移动19,19是第三小,所以操作次数:4-3+1=2

第(2)个例子,最小值是7,第二小是8。发现8在7前面,开始移动8,8是第二小,所以操作次数:6-2+1=5

总结:只要再给我10秒钟,我这道编程题分数就拿到手了,唉。。。

通过这次在线笔试,发现对于前端的知识了解的太少太少了,要想从事前端,还需要加倍努力,补充知识。

2017百度web前端实习生在线笔试题