leetode.599. Minimum Index Sum of Two Lists
来源:互联网 发布:数据库insert语句用法 编辑:程序博客网 时间:2024/05/18 03:46
Question
Suppose Andy and Doris want to choose a restaurant for dinner, and they both have a list of favorite restaurants represented by strings.
You need to help them find out their common interest with the least list index sum. If there is a choice tie between answers, output all of them with no order requirement. You could assume there always exists an answer.
Example 1:
Input:["Shogun", "Tapioca Express", "Burger King", "KFC"]["Piatti", "The Grill at Torrey Pines", "Hungry Hunter Steakhouse", "Shogun"]Output: ["Shogun"]Explanation: The only restaurant they both like is "Shogun".
Example 2:
Input:["Shogun", "Tapioca Express", "Burger King", "KFC"]["KFC", "Shogun", "Burger King"]Output: ["Shogun"]Explanation: The restaurant they both like and have the least index sum is "Shogun" with index sum 1 (0+1).
Note:
- The length of both lists will be in the range of [1, 1000].
- The length of strings in both lists will be in the range of [1, 30].
- The index is starting from 0 to the list length minus 1.
- No duplicates in both lists.
Solution
/** * Return an array of size *returnSize. * Note: The returned array must be malloced, assume caller calls free(). */char** findRestaurant(char** list1, int list1Size, char** list2, int list2Size, int* returnSize) { int i,j,sum=list1Size+list2Size-2,index=0; int n = list1Size > list2Size ? list1Size : list2Size; char **str = (char**)malloc(n * sizeof(char *)); for (i = 0; i < list1Size; i++) { for (j = 0; j < list2Size; j++) { if (strcmp(list1[i], list2[j]) == 0) { if (i+j <= sum) { sum = i + j; *(str+index) = (char)malloc(sizeof(char)); *(str+index) = list1[i]; index++; } break; } } } *returnSize = index; return str;}
Solution with hash map (别人的最优解)
/** * Return an array of size *returnSize. * Note: The returned array must be malloced, assume caller calls free(). */#include <string.h>#define HASHKEY 0xFF#define NAMESIZEALIGN8 0x20#define DEBUG 0char** findRestaurant(char** list1, int list1Size, char** list2, int list2Size, int* returnSize) { typedef struct hash_struct { char *name; int index; struct hash_struct *next; }hashs; int hindex, i, j, anssum = list1Size + list2Size, max; hashs *hashmap[HASHKEY + 1], *hcur; char ans[list1Size + list2Size][31], *acur, **ans_test; for (i = 0; i < HASHKEY + 1; i++) hashmap[i] = NULL; for (i = 0; i < list1Size; i++) { hindex = (list1[i][0] + list1[i][1]) & HASHKEY; hcur = malloc(sizeof(hashs)); hcur->name = list1[i]; hcur->index = i; if (hashmap[hindex]) hcur->next = hashmap[hindex]; else hcur->next = NULL; hashmap[hindex] = hcur; } for (i = 0; i < list2Size; i++) { hindex = (list2[i][0] + list2[i][1]) & HASHKEY; hcur = hashmap[hindex]; while (hcur) { if (strcmp(list2[i], hcur->name)) hcur = hcur->next; else { if (hcur->index + i < anssum) { anssum = hcur->index + i; *returnSize = 1; strcpy(ans[0], list2[i]); } else if (hcur->index + i == anssum) { j = *returnSize; strcpy(ans[j], list2[i]); (*returnSize)++; } break; } } } if (*returnSize) { max = *returnSize; ans_test = malloc(max * sizeof(char *)); for (i = 0; i < max; i++) { ans_test[i] = malloc(NAMESIZEALIGN8 * sizeof(char)); strcpy(ans_test[i], ans[i]); } return ans_test; } return NULL;}
阅读全文
0 0
- leetode.599. Minimum Index Sum of Two Lists
- 599. Minimum Index Sum of Two Lists
- 599. Minimum Index Sum of Two Lists
- 599. Minimum Index Sum of Two Lists
- 599. Minimum Index Sum of Two Lists
- 599. Minimum Index Sum of Two Lists
- 599. Minimum Index Sum of Two Lists
- 599. Minimum Index Sum of Two Lists
- 599. Minimum Index Sum of Two Lists
- 599. Minimum Index Sum of Two Lists
- 599. Minimum Index Sum of Two Lists
- 599. Minimum Index Sum of Two Lists
- 599Minimum Index Sum of Two Lists
- [leetcode] 599. Minimum Index Sum of Two Lists
- leetcode 599. Minimum Index Sum of Two Lists
- LeetCode 599. Minimum Index Sum of Two Lists(map,unordered_map)
- 599. Minimum Index Sum of Two Lists的C++解法
- LeetCode-599. Minimum Index Sum of Two Lists
- 算法竞赛入门经典(第2版)习题6-3 二叉树重建 UVa536
- [转发]在eclipse中新建Dynamic web project时选择2.5和3.0的区别
- Opengl学习笔记之Textures
- n!末尾有多少0 (数论)
- linux下的c++开发
- leetode.599. Minimum Index Sum of Two Lists
- spring security for rest web service
- 欢迎使用CSDN-markdown编辑器
- 宽容才能发现美好
- stract2中action中的type中redirectActio,redirectAction,chain的详解
- 第十三周
- JSON
- SQL Server 克隆数据库到同一服务器
- A Simple Math Problem(矩阵快速幂(模板))