Given holidays and leaves how to maximize days in vacations - Google Interview


http://www.1point3acres.com/bbs/thread-202732-1-1.html
最大假期问题, 之前面经看到过这个, 但是没有具体的描述, 就放过了。 结果就命背的被考到的。。。。。。。。。。我来详细描述下
input: 
a. 有n个城市, 每个城市之间有飞行时间, 
b. 给个飞行时间,
c. 给个vacation array, 代表每个城市每周的假期
d. 从第一个城市开始
意思就是每个周你可以呆在一个城市, 然后享受那个城市的假期。 
还有个限制, 就是城市与城市之间的飞行时间不能超过给定的飞行时间
求x weeks 你能享受到的最大假期总和
你自己设计输入的数据结构

描述起来真他母亲的繁琐, 怪不得没看到详细的说明。 -google 1point3acres
我的大概想法: 
1. 去掉那些飞行时间超过给定飞行时间的边。
2. 用adjancey list做的, 
3. 然后bfs, 暴力求解。 
4. 没写完。。。。。。

.1point3acres缃�
如图所示, 最大的应该 
week1, A, sum=2; . From 1point 3acres bbs
week2, B/C, sum=sum+1; 
week3, 回到A, sum+=3
total sum =6 

最后两轮都没回答好, 可以说写出来80%。 估计是挂了。 发现碰到没做过的题, 容易慌, 容易去套已经做过的题。。。, 然后思维混乱, 就会开始朝令夕改。 还是应该不去套已经做过的题, 就从个BF 的方法开始。 我都是想搞个优化, 结果最后又回到最初的暴力。。。。, 郁闷。。。。。。。。。 

4贪心就可以了
4就是把输出string当个栈,如果当前进来的字母比栈顶的小,就把栈顶的扔掉,小的放进去
比如pineapple
p->i->in->ie->a->ap->app->al->ale
擦, 这个不就是那个https://leetcode.com/problems/create-maximum-number/,
其实是新出的remove k digits

5可以dp的

就是
for 第k周
  for 城市c
      计算第k周在城市c的话,前k周最大享受的假期数
for loop里面那个计算可以递归根据第k-1周,城市c'的结果来算

5就是算前x周,假设你最后一周在城市c的话,最多的假期数。

我也有这个疑问, 是不是不能再同一个城市一直呆着
for j = city 0 to city n-1
       for k = city 0 to city n-1 // Flying from city k to city j
如果不能一直在同一个城市戴着, 那么就是 j!=k right?

第五题就是265. Paint House II变形把。。。。再加上飞行时间的限制,以及求min变成了求max。。。。

我也有这个疑问, 是不是不能再同一个城市一直呆着
for j = city 0 to city n-1
       for k = city 0 to city n-1 // Flying from city k to city j
如果不能一直在同一个城市戴着, 那么就是 j!=k right?

第五题就是265. Paint House II变形把。。。。再加上飞行时间的限制,以及求min变成了求max。。。。
最大假期问题,我按照我的理解写了一段测试代码,欢迎评论:
  1. class City(object):
  2.     def __init__(self, id, dstcity, weekholidays):
  3.         self.cityid = id
  4.         # key:city_id,value-distance to the destination
  5.         self.dstcity = dstcity. more info on 1point3acres.com
  6.         # x weeks holidays, index means the number of weeks
  7.         self.weekholidays = weekholidays

  8. class MaxHoliday(object):
  9.     def dfs(self, citys, start_city, week, maxweek, memhash, maxdistance):
  10.         if week == maxweek:. from: 1point3acres.com/bbs 
  11.             return 0
  12.         # if we have searched before, directly return
  13.         key = str(week) + '-' + str(start_city.cityid)
  14.         if key in memhash:
  15.             return memhash[key]
  16.         maxdays = 0. more info on 1point3acres.com
  17.         for cityid in start_city.dstcity:
  18.             if start_city.dstcity[cityid] <= maxdistance:. From 1point 3acres bbs
  19.                 maxdays = max(maxdays, self.dfs(citys, citys[cityid], week + 1, maxweek, memhash, maxdistance))
  20.         maxdays += start_city.weekholidays[week]
  21.         memhash[key] = maxdays. 鍥磋鎴戜滑@1point 3 acres
  22.         return maxdays

  23.     def maxholidayweeks(self, citys, maxweek, maxdistance):
  24.         # key: weeky+cityid,value: maxholiday
  25.         memhash = {}
  26.         return self.dfs(citys, citys['A'], 0, maxweek, memhash, maxdistance)


  27. cityA = City('A', {'B': 6, 'C': 2, 'D': 30}, [2, 0, 3])
  28. cityB = City('B', {'A': 6, 'C': 20, 'D': 7}, [1, 1, 0]).鐣欏璁哄潧-涓€浜�-涓夊垎鍦�
  29. cityC = City('C', {'A': 2, 'B': 20, 'D': 10}, [1, 1, 1])
  30. cityD = City('D', {'A': 20, 'B': 7, 'C': 10}, [0, 0, 2])
  31. citys = {'A': cityA, 'B': cityB, 'C': cityC, 'D': cityD}
  32. .鐣欏璁哄潧-涓€浜�-涓夊垎鍦�
  33. T = MaxHoliday(). 鐗涗汉浜戦泦,涓€浜╀笁鍒嗗湴
  34. print T.maxholidayweeks(citys, 3, 2)

突然看懂这题了,楼主说是BFS,但其实是DFS把,DFS可以算完一条路径的总时间之后再算另一条路径,比较清晰明了吧,我想问问大致是不是这样
从一个城市开始,这周待在这个城市,算时间,然后DFS到下一个城市,减去飞行时间,剩余的时间和城市的假期小的那个数就是你到下一个城市休假时间,DFS能走的节点数就是题目给的周数,比如说这里就是三周,而且这个DFS可以走已经走过的节点
另外如果飞行距离很长的,比如超过7天的,也就是这一周让你都要在飞机上度过的边基本就不用走了?

这个题飞行时间是不计在假期/工作时间里的,只是用来约束从一个城市能飞到哪些城市。
输入有一个值表示从第k周的城市飞到第k+1周的城市行程不能超过多少小时,因此有的sequence不可行(比如如果两个城市之间太远了,就能直飞,必须有几周在途中的城市先呆着)。
给定城市序列,飞行时间对假期总时间没有影响的。
比如有个假期很多的城市,为了飞到那里必须先飞到某个假期不太多的
algorithm - Given holidays and leaves how to maximize days in vacations? - Stack Overflow
Problem : Given the holidays as list of integers, between 0-364, and number of leaves N available, how to maximize the number of days in X vacations, where a vacation is a date range, which encompasses holidays that falls in the range and uses leaves for the rest in the range.

Method:
  1. List all the sub-sequences of holidays.
  2. Form all groups of X number of sub-sequences from 1.
  3. Filter 2. such that the days-in-between (days of leave) do not exceed N and return them sorted by number of vacation days descending.

Sample output for N=15, X=4:
(17,[[1,15],[53],[150],[245]]) -17 days of vacation, 13 days of leave utilized
                                 for the first vacation 

(14,[[15,20],[53],[185],[359,1]]) -14 days of vacation, 10 days of leave utilized
                                   for the first and last vacation
Read full article from algorithm - Given holidays and leaves how to maximize days in vacations? - Stack Overflow

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