算法题
题目:给定一个数组,里面有6个整数,求这个数组能够表示的最大24进制的时间是多少,输出这个时间,无法表示输出invalid。
输入描述:输入为一个整数数组,数组内有六个整数。输入数组长度为6,不需要考虑其它长度,元素值为0或者正整数,6个数字每个数字只能使用一次。
输出描述:输出为一个24进制格式的时间,或者字符串"invalid"。
备注: 输出时间格式为xx:xx:xx格式。
示例1
输入[0,2,3,0,5,6]
输出 23:56:00
示例2
输入[9,9,9,9,9,9]
输出invalid
思路
解题思路:
- 遍历所有可能的排列组合。
- 对于每一种排列,判断是否满足24小时制的时间格式。
- 在满足条件的排列中,找到最大的时间。
import java.util.Arrays;
public class Max24HourTime {
public static void main(String[] args) {
int[] input1 = {0, 2, 3, 0, 5, 6};
int[] input2 = {9, 9, 9, 9, 9, 9};
String output1 = getMaxTime(input1);
String output2 = getMaxTime(input2);
System.out.println(output1); // 输出 23:56:00
System.out.println(output2); // 输出 invalid
}
public static String getMaxTime(int[] arr) {
Arrays.sort(arr);
int[] time = new int[6];
String result = "invalid";
do {
int hour = arr[0] * 10 + arr[1];
int minute = arr[2] * 10 + arr[3];
int second = arr[4] * 10 + arr[5];
if (isValidTime(hour, minute, second)) {
result = String.format("%02d:%02d:%02d", hour, minute, second);
}
} while (nextPermutation(arr));
return result;
}
private static boolean isValidTime(int hour, int minute, int second) {
return hour >= 0 && hour <= 23 && minute >= 0 && minute <= 59 && second >= 0 && second <= 59;
}
private static boolean nextPermutation(int[] arr) {
int i = arr.length - 2;
while (i >= 0 && arr[i] >= arr[i + 1]) {
i--;
}
if (i >= 0) {
int j = arr.length - 1;
while (arr[j] <= arr[i]) {
j--;
}
swap(arr, i, j);
} else {
return false;
}
reverse(arr, i + 1, arr.length - 1);
return true;
}
private static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
private static void reverse(int[] arr, int start, int end) {
while (start < end) {
swap(arr, start, end);
start++;
end--;
}
}
}
getMaxTime
方法首先对输入数组进行排序,然后使用全排列的方式尝试所有可能的组合。
在每个组合中,将数组的前两个元素表示小时,中间两个元素表示分钟,后两个元素表示秒。
通过 isValidTime
方法检查是否为合法的时间。最终返回最大的合法时间。
介绍知识产权(发明专利、实用新型专利、软件著作权),如何产出,团队构成和个人角色。
如何产出知识产权:
创新和发现: 首要任务是通过创新和研究产生新的、独特的成果。这可能包括新的技术、产品、方法、设计等。
文档和记录: 对创新成果进行详细的文档记录,包括技术规范、实验结果、设计文稿等。保持详细的记录是后续知识产权保护的关键。
评估和验证: 对创新成果进行评估,确保其具备创新性、实用性和可行性。这可能涉及到技术评审、市场调研等。
知识产权保护:
- 发明专利: 如果创新涉及发明性的技术解决方案,可以考虑申请发明专利。这需要编写专利申请文件,通常由专利律师或专利代理人协助完成。
- 实用新型专利: 对于某些简单的、具有实用新型的技术创新,可以选择申请实用新型专利。
- 软件著作权: 对于软件代码的创新,可以通过版权保护来保护源代码和目标代码。
团队构成:
发明团队(Innovation Team): 负责创新和发现新技术、产品或方法的团队。
- 角色: 包括研究员、工程师、科学家等。
知识产权团队(IP Team): 负责知识产权保护和管理的专业团队。
- 角色: 包括专利律师、专利代理人、知识产权经理等。
市场调研团队(Market Research Team): 负责评估市场需求和竞争情况。
- 角色: 市场分析师、商业发展专员等。
个人角色:
发明人(Inventor): 创造性地提出新的技术解决方案,是知识产权产出过程中的核心。
研究员/工程师/科学家: 参与创新过程,提供专业的技术支持和实验数据。
专利律师/代理人: 协助编写和递交专利申请文件,提供法律保护的专业建议。
知识产权经理: 负责整体知识产权战略,协调知识产权团队的工作,确保知识产权的有效管理。
市场分析师/商业发展专员: 参与评估市场需求和商业机会,为公司的知识产权决策提供信息支持。
项目经理: 协调各个团队的工作,确保整个知识产权产出过程的顺利进行。
大学四年的规划、经历和职业规划
大学主要还是靠自己自学过来的,当然每个阶段都有不同的规划。
初入大一:
- 学业优先: 着重适应大学学习环境,培养良好的学术习惯,确保学业基础。
- 社团和组织: 参与一些兴趣社团、学生组织或志愿者活动,拓展社交圈。
- 实习: 寻找暑期实习机会,了解实际工作环境,建立职场意识。
步入大二:
- 专业方向: 确定自己的专业方向,选择相关的课程和实践项目。
- 技能培养: 学习和提升与专业相关的技能,如编程、设计、沟通等。
- 实习和兼职: 继续寻找实习和兼职机会,积累实际经验。
成熟大三:
- 深度学习: 在专业领域深入学习,可能选择参与科研项目或实际项目。
- 实习经验: 争取更有挑战性的实习,锻炼自己的实际操作能力。
老油条大四:
- 毕业论文/项目: 投入毕业论文或项目,为未来职业方向提前做准备。
- 职业规划: 确立自己的职业规划,了解行业趋势,制定求职计划。
实习过程中遇到的技术难点、亮点
技术难点:
- 性能优化: 处理大规模数据、复杂页面结构等情况下的性能优化等。优化网络请求、提升渲染性能、懒加载等技术。
- 跨平台兼容性: 不同浏览器、设备和平台的兼容性问题可能需要解决。确保在各种环境中良好运行,尤其是移动端和桌面端的兼容性。
- 前端安全性: 处理前端安全问题,包括防止 XSS(跨站脚本攻击)、CSRF(跨站请求伪造)等安全漏洞。
- 前端工程化: 使用现代前端工程化工具,如Webpack、Babel等,配置和优化构建过程,管理前端依赖,确保项目的可维护性和扩展性。
技术亮点:
- 前沿技术应用: 在项目中使用了一些前沿的技术,如WebAssembly、Service Workers、Web Components等,提升了应用的性能和体验。
- 用户体验优化: 利用前端技术改善用户体验,包括页面加载速度的优化、动画效果的运用、无感知加载等。
- 模块化和组件化: 使用模块化和组件化的开发方式,提高代码的可维护性和可复用性。
- 技术分享和团队合作: 积极分享学习成果,与团队成员共同解决技术难题,提高整个团队的水平。
反问环节、业务介绍
技术栈和业务
作者:前端LeBron
链接:https://juejin.cn/post/7025793782998106149