首页 > 其他分享 >LeetCode 刷题集锦

LeetCode 刷题集锦

时间:2023-12-30 10:33:58浏览次数:35  
标签:ListNode temp int v1 v2 result 集锦 LeetCode 刷题


目录

1.  1108. IP 地址无效化

2.  1093. 大样本统计

3.  888. 公平的糖果交换

4.  445. 两数相加 II 


1.  1108. IP 地址无效化

题目链接

1108. IP 地址无效化

题目描述

LeetCode 刷题集锦_IP

解题思路

替换. 为 [.] ,  如果使用 Java 最好使用 stringBuilder, 而且可以使用 string 封装好的 replace api 。

时间复杂度:O(n)。

运行结果

LeetCode 刷题集锦_IP_02

参考代码

代码复制到IDE 或 LeetCode 的编辑框中格式是没问题的。 

class Solution {
public:
    string defangIPaddr(string address) {
        string result;
        int length = address.size();
        for(int i=0; i<length; i++) {
            if(address[i] == '.') {
                result += "[.]";
            } else {
                result += address[i];
            }
        }
        return result;
    }
};

 

2.  1093. 大样本统计

题目链接

1093. 大样本统计

题目描述

LeetCode 刷题集锦_时间复杂度_03

LeetCode 刷题集锦_i++_04

解题思路

有注释。

时间复杂度:O(n)。

运行结果

LeetCode 刷题集锦_i++_05

参考代码

class Solution {
public:
    vector<double> sampleStats(vector<int>& count) {
        vector<int> countTemp = count;
        int totalNumber = 0; // 样本的数量
        double minn = 255; // 最小值
        double maxx = 0; // 最大值
        double sum = 0; // 总大小
        double midnum = 0; // 中位数
        double zhongshu = 0; // 众数
        double zhongshuNumber = 0; // 众数的数量
        bool flagMin = false; // false 未找到最小值
        
        // 找到最大值,众数,并是count[i]变为前缀和,用来求中位数
        for(int i=0; i<256; i++) {
            sum += countTemp[i]*i;
            totalNumber += countTemp[i];
            if(0 != countTemp[i]) {
                maxx = i;
                if(countTemp[i] > zhongshuNumber) {
                    zhongshu = i;
                    zhongshuNumber = countTemp[i];
                }
                if(false == flagMin) {
                    minn = i;
                    flagMin = true;
                }
            }
            if(0 != i) {
                countTemp[i] += countTemp[i-1];
            }
        }
        
        bool flag = false; // false 为偶数
        int findNumber = totalNumber/2;
        if(1 == totalNumber%2) {
            flag = true;
            findNumber++;
        }
        // 偶数需要找两次
        int times = 2;
        for(int i=0; i<256;i++) {
            if(countTemp[i] >= findNumber) {
                // 处理奇数
                if(true == flag) {
                    midnum = i;
                    break;
                } else { // 处理偶数
                    times --;
                    findNumber ++;
                    midnum += i;
                    if(0 == times) {
                        midnum /= 2;
                        break;
                    }
                    i--;
                }
            } 
        }
        vector<double> result;
        result.push_back(minn);
        result.push_back(maxx);
        result.push_back(sum/totalNumber);
        result.push_back(midnum);
        result.push_back(zhongshu);
        return result;
    }
};

 

3.  888. 公平的糖果交换

题目链接

888. 公平的糖果交换

题目描述

 

 

LeetCode 刷题集锦_i++_06

LeetCode 刷题集锦_i++_07

解题思路

vis[B] 数组标记 B中出现的数,然后根据遍历数组A中的数,B中存在合适的交换的数,则交换。

时间复杂度:O(n)。

运行结果

LeetCode 刷题集锦_IP_08

参考代码

class Solution {
public:
    vector<int> fairCandySwap(vector<int>& A, vector<int>& B) {
        vector<int> result;

        int MAX_N = 100010;
        bool visB[MAX_N];
        // 初始化
        for(int i=0; i<MAX_N; i++) {
            visB[i] = false;
        }
        
        // MaxTotal 10000*100000
        int totalA = 0, totalB = 0;
        int lengthA = A.size();
        int lengthB = B.size();
        for(int i=0; i<lengthA; i++) {
            totalA += A[i];
        }
        
        for(int i=0; i<lengthB; i++) {
            totalB += B[i];
            visB[B[i]] = true;
        }
        
        int distace = (totalB-totalA)/2;
        for(int i=0; i<lengthA; i++) {
            int temp = A[i]+distace;
            if(temp > 0 && temp < MAX_N) {
                if(visB[temp] == true) {
                    result.push_back(A[i]);
                    result.push_back(temp);
                    break;
                }
            }
        }
        
        return result;
    }
};

 

4.  445. 两数相加 II 

题目链接

445. 两数相加 II

题目描述

LeetCode 刷题集锦_时间复杂度_09

 

解题思路

把链表存到动态数组vector里面,然后使用两个vector模拟加法。

时间复杂度:O(n)。

运行结果

LeetCode 刷题集锦_时间复杂度_10

参考代码

 

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        ListNode* result = NULL;
        vector<int> v1, v2;
        v1.clear();
        v2.clear();
        v1.push_back(0);
        v2.push_back(0);
        while(l1 != NULL) {
            v1.push_back(l1->val);
            l1 = l1->next;
        }
        while(l2 != NULL) {
            v2.push_back(l2->val);
            l2 = l2->next;
        }
        
        int len1 = v1.size(), len2 = v2.size();
        int length = min(len1-1, len2-1);
        
        if(len1 >= len2) {
            for(int i=1; i<=length; i++) {
                v1[len1-i] = v1[len1-i]+v2[len2-i];  
                if(v1[len1-i] >= 10) {
                    v1[len1-i] -= 10;
                    v1[len1-i-1] ++;
                }
            }
            for(int i=len1-length-1; i>=1; i--) {
                if(v1[i] >= 10) {
                    v1[i] -= 10;
                    v1[i-1] ++;
                }
            }
            ListNode* temp;
            if(v1[0] != 0) {
                temp = new ListNode(v1[0]);
                result = temp;
            }
            for(int i=1; i<len1; i++) {
                if(NULL == result) {
                    temp = new ListNode(v1[i]);
                    result = temp; 
                } else {
                    temp->next = new ListNode(v1[i]);
                    temp = temp->next;
                }
            }
        } else{
            for(int i=1; i<=length; i++) {
                v2[len2-i] = v1[len1-i]+v2[len2-i];
                if(v2[len2-i] >= 10) {
                    v2[len2-i] -= 10;
                    v2[len2-i-1] ++;
                }
            }
            for(int i=len2-length-1; i>=1; i--) {
                if(v2[i] >= 10) {
                    v2[i] -= 10;
                    v2[i-1] ++;
                }
            }
            ListNode* temp;
            if(v2[0] != 0) {
                temp = new ListNode(v2[0]);
                result = temp;
            }
            for(int i=1; i<len2; i++) {
                if(NULL == result) {
                    temp = new ListNode(v2[i]);
                    result = temp; 
                } else {
                    temp->next = new ListNode(v2[i]);
                    temp = temp->next;
                }
            }
        }
        return result;
    }
};

 

 

标签:ListNode,temp,int,v1,v2,result,集锦,LeetCode,刷题
From: https://blog.51cto.com/xuxiangyang/9038514

相关文章

  • codeforces刷题(1100):1864B_div1+div2
    B、SwapandReverse跳转原题点击此:该题地址1、题目大意  给你一个字符串和k,你可以对该字符串做一下两个操作:交换\(a_i\)和\(a_{i+2}\)的字符;对\([i,i+k-1]\)这个区间的字符就行反转;问你通过这两个操作后,原字符串所能生成新的字典序最小的字符串是什么。2、题目解......
  • 【力扣】-28. 找出字符串中第一个匹配项的下标|刷题打卡-JS
    给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从0开始)。如果 needle 不是 haystack 的一部分,则返回  -1 。示例1:输入:haystack="sadbutsad",needle="sad"输出:0解释:"sad"在下标0和6处匹配。......
  • 【力扣】-39. 组合总和|刷题打卡-JS
    给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。candidates 中的 同一个 数字可以 无限制重复被选取 。如果至少一个......
  • 【力扣】-41. 缺失的第一个正数|刷题打卡-JS
    给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。示例1:输入:nums=[1,2,0]输出:3示例2:输入:nums=[3,4,-1,1]输出:2示例3:输入:nums=[7,8,9,11,12]输出:1提示:1<=nums.length<=5*......
  • leetcode 2706 购买两块巧克力
    题目: 2706购买两块巧克力思路:找两个最小值。分情况讨论 代码classSolution:defbuyChoco(self,prices:List[int],money:int)->int:#遍历一遍,找2个最小值#找一个最小值我们都会。#找次小值,就分两种情况,假设minPrice是最小......
  • 2023最新中级难度Flask框架面试题,包含答案。刷题必备!记录一下。
    好记性不如烂笔头内容来自面试宝典-中级难度Flask框架面试题合集问:Flask是什么?它有哪些特点?Flask是一个用Python编写的轻量级Web应用程序框架。它由ArminRonacher在2010年4月1日创建,原本只是一个愚人节玩笑,后来由于其简单、灵活和强大的特性而被广泛采用。以下是Flask......
  • 【腾讯云中间件】2023年热门文章集锦
    各位读者,大家好!光阴似箭,日月如梭,仿佛冬奥会的盛况还在眼前,新的一年却即将到来。在过去的一年里,我们见证了腾讯云中间件在产品升级与创新方面的显著进步,包括消息队列TDMQ品牌全新升级和新产品发布,微服务引擎升级与异地多活单元化能力发布等。腾讯云中间件团队一直秉承持续创新的......
  • 在不使用内置函数和中间变量的情况交换数字LeetCode力扣题解面试题16.01
    #异或法#Kotlin```KotlinclassSolution{  funswapNumbers(numbers:IntArray):IntArray{    numbers[0]=numbers[0]xornumbers[1]    numbers[1]=numbers[1]xornumbers[0]    numbers[0]=numbers[0]xor......
  • codeforces刷题(1100):1901B_div2
    B、ChipandRibbon跳转原题点击此:该题地址1、题目大意  存在一条由n个单元格组成的带子。chip可以做两个操作:1、由\(i\)走到\(i+1\),但是不能走到\(i-1\);2、可以传送到任意位置,包括传送到原地。每到一个单元格,该单元格的数值+1(初始为0)。最开始chip在从第一格开始走起(题......
  • codeforces刷题(1100):1902B_div2
    B、GettingPoints跳转原题点击此:该题地址1、题目大意  Monocarp为了完成总共n天的某学期的p学分任务。Monocarp每天可以选择两种度过方式:上一次课和完成最多两个任务或者休息一天。其中上课获得l学分,每个任务获得t学分,其中任务不可以重复接取,并且每周获得一个新的任务(第一......