Jobdu1500-出操队形[微策略面试题] | Acm之家


微策略2013年校园招聘面试一面试题
九度1500-出操队形[微策略面试题] | Acm之家
在读高中的时候,每天早上学校都要组织全校的师生进行跑步来锻炼身体,每当出操令吹响时,大家就开始往楼下跑了,然后身高矮的排在队伍的前面,身高较高的就要排在队尾。突然,有一天出操负责人想了一个主意,想要变换一下队形,就是当大家都从楼上跑下来后,所有的学生都随机地占在一排,然后出操负责人从队伍中抽取出一部分学生,使得队伍中剩余的学生的身高从前往后看,是一个先升高后下降的"山峰"形状。据说这样的形状能够给大家带来好运,祝愿大家在学习的道路上勇攀高峰。(注,山峰只有一边也符合条件,如1,1、2,2、1均符合条件)
输入:
输入可能包含多个测试样例。
对于每个测试案例,输入的第一行是一个整数n(1<=n<=1000000):代表将要输入的学生个数。
输入的第二行包括n个整数:代表学生的身高(cm)(身高为不高于200的正整数)。
输出:
对应每个测试案例,输出需要抽出的最少学生人数。
样例输入:
6 100 154 167 159 132 105 5 152 152 152 152 152
样例输出:
0 4
这个是LIS(最长上升子序列长度)的变体。有动态规划解法动态规划(3)-最长递增子序列  和 O(nlogn)算法 的解法。
14//在arr中找到的大于等于key的第一个数。没有的话,返回n
15//此处也可以直接调用STL里面的lower_bound函数
16int lower_bound(int arr[],int n ,int key){
17    if(n == 0) return 0;
18    int low = 0;
19    int high = n-1;
20    while(low <= high){
21        int mid = (low+high)/2;
22        if( arr[mid] < key)
23            low = mid+1;
24        else
25            high = mid-1;
26    }
27    return low;
28}
29 
30//结果存放在res中,res[i]表示 arr[0...i]的最大上升序列的长度。
31int lis(int arr[], int n, int res[]){
32    res[0] = 1;
33    int lisSize = 1;
34    int low;
35    for(int i=1; i<n; i++){
36        //或调用系统 的lower_bound
37        /*int * p = lower_bound(arr, arr+lisSize, arr[i]);
38        low = p - arr;*/
39        low = lower_bound(arr, lisSize, arr[i]);
40        //如果超出,更新最大长度
41        if(low >= lisSize) lisSize = low+1;
42        //用arr[i]更新较大的那个值
43        arr[low] = arr[i];
44        res[i] = lisSize;
45    }
46    return lisSize;
47}
48 
49int main() {
50    //freopen("in.txt", "r", stdin);
51    int n;
52    int * arr, *reverseArr, *res, *reverRes;
53    while(scanf("%d",&n) != EOF){
54        arr = new int[n+1];
55        reverseArr = new int[n+1];
56        res = new int[n+1];
57        for(int i=0; i<n; i++) scanf("%d", &arr[i]);
58        //反向的再计算一次
59        for(int i=0; i<n; i++) reverseArr[i] = arr[n-i-1];
60        lis(arr, n, res);
61        free(arr);
62        reverRes = new int[n+1];
63        lis(reverseArr, n, reverRes);
64        free(reverseArr);
65        int ans = 0;
66        for (int i = 0; i < n; i++) {
67            if (ans < res[i] + reverRes[n - i - 1] - 1)
68                ans = res[i] + reverRes[n - i - 1] - 1;
69        }
70        printf("%d\n", n-ans);
71    }
72    return 0;
73}
X.  http://blog.csdn.net/JDPlus/article/details/20531307
http://www.xuebuyuan.com/738145.html
  1. int BSearch(int dp[], int start, int end, int key){//搜索大于等于key的第一个元素的位置  
  2.     int middle;  
  3.     while (start <= end){  
  4.         middle = ((end - start) >> 1) + start;  
  5.         if (dp[middle] < key)  
  6.             start = middle + 1;  
  7.         else if (dp[middle] > key)  
  8.             end = middle - 1;  
  9.         else  
  10.             return middle;  
  11.     }  
  12.     return start;  
  13. }  
  14.   
  15. int Insert(int data, int *nMax){//找到以data为结尾的上升子序列的长度,并返回  
  16.     int j = BSearch(dp, 0, *nMax, data);  
  17.     if (j > *nMax){  
  18.         *nMax = j;  
  19.         dp[j] = data;  
  20.     }  
  21.     else if (dp[j-1] < data && data < dp[j]){  
  22.         dp[j] = data;  
  23.     }  
  24.     return j;  
  25. }  
  26.   
  27. void LIS(int n){//求以student[i]为结尾的上升子序列的长度  
  28.     int i;  
  29.     int nMaxLIS = 1;  
  30.     dp[0] = -1;  
  31.     dp[1] = student[1];  
  32.     cnt[1] = 1;  
  33.     for (i = 2; i <= n; ++i){  
  34.         cnt[i] = Insert(student[i], &nMaxLIS);  
  35.     }  
  36. }  
  37.   
  38. void LDS(int n){//求以student[i]为开头的下降子序列的长度  
  39.     int i;  
  40.     int nMaxLDS = 1;  
  41.     dp[0] = -1;  
  42.     dp[1] = student[n];  
  43.     for (i = n - 1; i >= 1; --i){  
  44.         cnt[i] += Insert(student[i], &nMaxLDS) - 1;  
  45.     }  
  46. int main(void){  
  47.     int n, i;  
  48.     int max;  
  49.     while (scanf("%d", &n) != EOF){  
  50.         for (i = 1; i <= n; ++i)  
  51.             scanf("%d", &student[i]);  
  52.         LIS(n);  
  53.         LDS(n);  
  54.         max = -1;  
  55.         for (i = 1; i <= n; ++i)  
  56.             if (max < cnt[i])  
  57.                 max = cnt[i];  
  58.         printf("%d\n", n - max);  
  59.     }  
  60.     return 0;  
  61. }  
Read full article from 九度1500-出操队形[微策略面试题] | Acm之家

Labels

LeetCode (1432) GeeksforGeeks (1122) LeetCode - Review (1067) Review (882) Algorithm (668) to-do (609) Classic Algorithm (270) Google Interview (237) Classic Interview (222) Dynamic Programming (220) DP (186) Bit Algorithms (145) POJ (141) Math (137) Tree (132) LeetCode - Phone (129) EPI (122) Cracking Coding Interview (119) DFS (115) Difficult Algorithm (115) Lintcode (115) Different Solutions (110) Smart Algorithm (104) Binary Search (96) BFS (91) HackerRank (90) Binary Tree (86) Hard (79) Two Pointers (78) Stack (76) Company-Facebook (75) BST (72) Graph Algorithm (72) Time Complexity (69) Greedy Algorithm (68) Interval (63) Company - Google (62) Geometry Algorithm (61) Interview Corner (61) LeetCode - Extended (61) Union-Find (60) Trie (58) Advanced Data Structure (56) List (56) Priority Queue (53) Codility (52) ComProGuide (50) LeetCode Hard (50) Matrix (50) Bisection (48) Segment Tree (48) Sliding Window (48) USACO (46) Space Optimization (45) Company-Airbnb (41) Greedy (41) Mathematical Algorithm (41) Tree - Post-Order (41) ACM-ICPC (40) Algorithm Interview (40) Data Structure Design (40) Graph (40) Backtracking (39) Data Structure (39) Jobdu (39) Random (39) Codeforces (38) Knapsack (38) LeetCode - DP (38) Recursive Algorithm (38) String Algorithm (38) TopCoder (38) Sort (37) Introduction to Algorithms (36) Pre-Sort (36) Beauty of Programming (35) Must Known (34) Binary Search Tree (33) Follow Up (33) prismoskills (33) Palindrome (32) Permutation (31) Array (30) Google Code Jam (30) HDU (30) Array O(N) (29) Logic Thinking (29) Monotonic Stack (29) Puzzles (29) Code - Detail (27) Company-Zenefits (27) Microsoft 100 - July (27) Queue (27) Binary Indexed Trees (26) TreeMap (26) to-do-must (26) 1point3acres (25) GeeksQuiz (25) Merge Sort (25) Reverse Thinking (25) hihocoder (25) Company - LinkedIn (24) Hash (24) High Frequency (24) Summary (24) Divide and Conquer (23) Proof (23) Game Theory (22) Topological Sort (22) Lintcode - Review (21) Tree - Modification (21) Algorithm Game (20) CareerCup (20) Company - Twitter (20) DFS + Review (20) DP - Relation (20) Brain Teaser (19) DP - Tree (19) Left and Right Array (19) O(N) (19) Sweep Line (19) UVA (19) DP - Bit Masking (18) LeetCode - Thinking (18) KMP (17) LeetCode - TODO (17) Probabilities (17) Simulation (17) String Search (17) Codercareer (16) Company-Uber (16) Iterator (16) Number (16) O(1) Space (16) Shortest Path (16) itint5 (16) DFS+Cache (15) Dijkstra (15) Euclidean GCD (15) Heap (15) LeetCode - Hard (15) Majority (15) Number Theory (15) Rolling Hash (15) Tree Traversal (15) Brute Force (14) Bucket Sort (14) DP - Knapsack (14) DP - Probability (14) Difficult (14) Fast Power Algorithm (14) Pattern (14) Prefix Sum (14) TreeSet (14) Algorithm Videos (13) Amazon Interview (13) Basic Algorithm (13) Codechef (13) Combination (13) Computational Geometry (13) DP - Digit (13) LCA (13) LeetCode - DFS (13) Linked List (13) Long Increasing Sequence(LIS) (13) Math-Divisible (13) Reservoir Sampling (13) mitbbs (13) Algorithm - How To (12) Company - Microsoft (12) DP - Interval (12) DP - Multiple Relation (12) DP - Relation Optimization (12) LeetCode - Classic (12) Level Order Traversal (12) Prime (12) Pruning (12) Reconstruct Tree (12) Thinking (12) X Sum (12) AOJ (11) Bit Mask (11) Company-Snapchat (11) DP - Space Optimization (11) Dequeue (11) Graph DFS (11) MinMax (11) Miscs (11) Princeton (11) Quick Sort (11) Stack - Tree (11) 尺取法 (11) 挑战程序设计竞赛 (11) Coin Change (10) DFS+Backtracking (10) Facebook Hacker Cup (10) Fast Slow Pointers (10) HackerRank Easy (10) Interval Tree (10) Limited Range (10) Matrix - Traverse (10) Monotone Queue (10) SPOJ (10) Starting Point (10) States (10) Stock (10) Theory (10) Tutorialhorizon (10) Kadane - Extended (9) Mathblog (9) Max-Min Flow (9) Maze (9) Median (9) O(32N) (9) Quick Select (9) Stack Overflow (9) System Design (9) Tree - Conversion (9) Use XOR (9) Book Notes (8) Company-Amazon (8) DFS+BFS (8) DP - States (8) Expression (8) Longest Common Subsequence(LCS) (8) One Pass (8) Quadtrees (8) Traversal Once (8) Trie - Suffix (8) 穷竭搜索 (8) Algorithm Problem List (7) All Sub (7) Catalan Number (7) Cycle (7) DP - Cases (7) Facebook Interview (7) Fibonacci Numbers (7) Flood fill (7) Game Nim (7) Graph BFS (7) HackerRank Difficult (7) Hackerearth (7) Inversion (7) Kadane’s Algorithm (7) Manacher (7) Morris Traversal (7) Multiple Data Structures (7) Normalized Key (7) O(XN) (7) Radix Sort (7) Recursion (7) Sampling (7) Suffix Array (7) Tech-Queries (7) Tree - Serialization (7) Tree DP (7) Trie - Bit (7) 蓝桥杯 (7) Algorithm - Brain Teaser (6) BFS - Priority Queue (6) BFS - Unusual (6) Classic Data Structure Impl (6) DP - 2D (6) DP - Monotone Queue (6) DP - Unusual (6) DP-Space Optimization (6) Dutch Flag (6) How To (6) Interviewstreet (6) Knapsack - MultiplePack (6) Local MinMax (6) MST (6) Minimum Spanning Tree (6) Number - Reach (6) Parentheses (6) Pre-Sum (6) Probability (6) Programming Pearls (6) Rabin-Karp (6) Reverse (6) Scan from right (6) Schedule (6) Stream (6) Subset Sum (6) TSP (6) Xpost (6) n00tc0d3r (6) reddit (6) AI (5) Abbreviation (5) Anagram (5) Art Of Programming-July (5) Assumption (5) Bellman Ford (5) Big Data (5) Code - Solid (5) Code Kata (5) Codility-lessons (5) Coding (5) Company - WMware (5) Convex Hull (5) Crazyforcode (5) DFS - Multiple (5) DFS+DP (5) DP - Multi-Dimension (5) DP-Multiple Relation (5) Eulerian Cycle (5) Graph - Unusual (5) Graph Cycle (5) Hash Strategy (5) Immutability (5) Java (5) LogN (5) Manhattan Distance (5) Matrix Chain Multiplication (5) N Queens (5) Pre-Sort: Index (5) Quick Partition (5) Quora (5) Randomized Algorithms (5) Resources (5) Robot (5) SPFA(Shortest Path Faster Algorithm) (5) Shuffle (5) Sieve of Eratosthenes (5) Strongly Connected Components (5) Subarray Sum (5) Sudoku (5) Suffix Tree (5) Swap (5) Threaded (5) Tree - Creation (5) Warshall Floyd (5) Word Search (5) jiuzhang (5)

Popular Posts