今天时间又有点晚了,研究公司的业务部门,职能部门和支撑部门研究了好久,把时间都耽误了,但是还算有点心得体会。得出的结论还真的就是在公司晋升基本靠熬资历看运气,干技术没前途只能用业余时间自学努力掌握技术准备跳槽,反正就是哪一条路都不好走。目前我是准备走技术了,晋升太悬了也熬不起,还是技术掌握在自己手里比较踏实。
今日进度:
1.坚持听网课,坚持刷题
2.坚持早睡,这个今天估计晚了,明天可能早点
3.坚持锻炼,可能只能明天早上了
4.坚持录小王子
5.坚持记录
学习笔记:
1.横向越权:横向越权指的是攻击者尝试访问与他拥有相同权限的用户的资源。纵向越权:纵向越权指的是一个低级别攻击者尝试访问高级别用户的资源
2.电商网站开发模块:用户模块开发,分类管理模块开发,商品管理模块开发,购物车模块开发,收货地址管理模块开发,支付模块开发,订单管理模块开发
3.90. 子集 II
给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。
解集不能包含重复的子集。返回的解集中,子集可以按 任意顺序排列。
解题思路:遍历数组,分别对选取当前元素和不选取当前元素做递归,设置一个visited数组来记录当前的状态,如果不选取,传入false,反之传入true。如果遇到重复的元素,就直接跳过,直到遍历完整个数组,将一组子集添加到结果集,再进行回溯。
class Solution {
List<List<Integer>> res = new ArrayList<List<Integer>>();
List<Integer> tmp = new ArrayList<Integer>();
public List<List<Integer>> subsetsWithDup(int[] nums) {
Arrays.sort(nums);
dfs(false, nums, 0);
return res;
}
public void dfs(boolean visited, int[] nums, int index){
int n = nums.length;
if(index == n){
res.add(new ArrayList<Integer>(tmp));
return;
}
dfs(false, nums, index+1);
if(!visited && index>0 && nums[index] == nums[index-1]){
return;
}
tmp.add(nums[index]);
dfs(true, nums, index+1);
tmp.remove(tmp.size()-1);
}
}
4.401. 二进制手表
二进制手表顶部有 4 个 LED 代表 小时(0-11),底部的 6 个 LED 代表 分钟(0-59)。每个 LED 代表一个 0 或 1,最低位在右侧。
给你一个整数 turnedOn ,表示当前亮着的 LED 的数量,返回二进制手表可以表示的所有可能时间。你可以 按任意顺序 返回答案。
小时不会以零开头:
例如,“01:00” 是无效的时间,正确的写法应该是 “1:00” 。
分钟必须由两位数组成,可能会以零开头:
例如,“10:2” 是无效的时间,正确的写法应该是 “10:02” 。
示例 1:
解题思路:采用枚举法,将小时和分钟的所有情况的二进制和列出来,如果和目标值相同,说明这是一组满足条件的情况,将它加入结果集即可。
class Solution {
public List<String> readBinaryWatch(int turnedOn) {
List<String> res = new ArrayList<String>();
for(int h=0; h<12; h++){
for(int m=0; m<=59; m++){
if(Integer.bitCount(h)+Integer.bitCount(m) == turnedOn){
res.add(h+":"+ (m < 10 ? "0" : "" )+m);
}
}
}
return res;
}
}
今天实在太晚了,明天争取不要想那么多,晚上回来就按照计划加紧干,明天继续加油!