LOADING

加载过慢请开启缓存 浏览器默认开启

2023/10/28

每日一题(三数之和)+深度学习论文阅读

第15题. 三数之和

力扣题目链接(opens new window)

给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。

注意: 答案中不可以包含重复的三元组。

示例:

给定数组 nums = [-1, 0, 1, 2, -1, -4],

满足要求的三元组集合为: [ [-1, 0, 1], [-1, -1, 2] ]

采取排序去重方法,耗时和内存占用都很极限,这题确实有点意思,“去重”是关键难点,明天试试用更简单的方法解决

class Solution4 {  //太菜了,抄个去重解法
public:
    vector<vector<int>> threeSum(vector<int>& nums) {
        vector<vector<int>> result;
        sort(nums.begin(), nums.end());
        // 找出a + b + c = 0
        // a = nums[i], b = nums[j], c = -(a + b)
        for (int i = 0; i < nums.size(); i++) {
            // 排序之后如果第一个元素已经大于零,那么不可能凑成三元组
            if (nums[i] > 0) {
                break;
            }
            //循环是两层组合式的,去重也要注意
            if (i > 0 && nums[i] == nums[i - 1]) { //去重:i>0才开始判断,而下边的循环会往后看2个,因此最多重复的3个元素已经全看了遍
                continue;
            }
            unordered_set<int> set;
            for (int j = i + 1; j < nums.size(); j++) {
                if (j > i + 2&& nums[j] == nums[j-1]&& nums[j-1] == nums[j-2]) { // 三元组元素b去重,最多需要往后看2个元素,然后才去重
                    continue;
                }
                int c = 0 - (nums[i] + nums[j]);
                if (set.find(c) != set.end()) {
                    result.push_back({nums[i], nums[j], c});
                    set.erase(c);// 一种三元组和只要删除一个元素,就相当于删除了该种组合;由于这里序列是顺序排列的,因此c一定是比num[i、j]更小的,之后往下走必然不会有找到带c的组合
                } else {
                    set.insert(nums[j]);
                }
            }
        }
        return result;
    }
};

论文阅读

读了篇学长的毕设,了解了图片多模态与联合学习,学长分离了ROI区域,将ROI和原图分别塞进两个cnn模型里,再用自适应阈值融合调参,就能得到更好的结果

感觉毕设挺水的,排列组合了下模型理论,希望这种水平能发期刊?