(C++)Leetcode狂刷200题——标签“数组篇--简单难度10道 #1两数之和”

c++复习(数组题) 1、找出数组超过一半的数 class Solution { public: int MoreThanHalfNum_Solution(vector<int> numbers) { //思路如果超过一半,排序好的中间的值肯定是最多值 //采用快排,时间复杂度为O(nlogn+n)并非此题最优解 ... 阅读详情

一、数组篇–简单难度(出现频率降序)
在这里插入图片描述
#1 两数之和
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/two-sum

1、暴力解法(时间复杂度O(n²),空间复杂度O(1):

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        vector<int> ans;
        int n = nums.size();
        for( int i=0; i < n;i++){
            int reslut = target - nums[i];
            for( int j=i+1; j < n; j++){ //注意这里向下查找时需要从i的下一个开始查找!
                if(nums[j]==reslut){
                    ans.push_back(i);
                    ans.push_back(j);
                    return ans;
                }
            } 
        }
        return ans;
    }
};
2、排序+双指针法

先使用sort排好序O(nlogn),排序好后从数组两头向中间遍历O(n)得到结果。
时间复杂度nlogn),空间复杂度O(n)。

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        vector<int> ans ; 
        vector<int> temp;
        temp = nums;
        sort(temp.begin(),temp.end());
        int n = temp.size();
        int i = 0;
        int j = n-1;
        while(i<j){     
            if(temp[i]+temp[j] < target) 
                i++;
                 else if(temp[i]+temp[j] > target) 
                    j--;
                    else
                        break;
        } 
        if(i<j){                  //此处去原数组寻找目标值的时候,两个值一定要分开查找且唯一。否则可能会出现多个目标值或重复的目标值
            for( int k=0; k<n;k++){
                if(i< n && nums[k]==temp[i]){
                    ans.push_back(k);
                    i = n;
                }

                else if(j< n && nums[k]==temp[j]){
                    ans.push_back(k);
                    j = n;
                }
                if(i==n && j==n) return ans;
            }
        }
        return ans;   
    }
};

3.hash法
利用undered_map数组构造映射,Key是数组nums里数字,value是该数字的index。遍历nums[i],查找hash表中是否存在target-nums[i],如若存在则将i与hash_map[target-nums[i]]放入输出结果的数组中,若不存在把该数字的index放到hash表中
hash_map[nums[i]] = i;
时间复杂度O(n),空间复杂度O(n)

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        vector<int> ans;
        unordered_map<int , int> hash_map; //Key是数组nums里数字,value是该数字的index
        int n= nums.size();

        for( int i=0; i<n; i++){
            int result = target - nums[i];
            if(hash_map.find(result) != hash_map.end()){
                ans.push_back(hash_map[result]);
                ans.push_back(i);
                return ans;
            }
            else
            hash_map[nums[i]] = i;   //未找到时,将其放入道hash表中
        }
        return ans;   
    }
};

(C++)Leetcode狂刷200题——标签“动态规划篇--简单难度10道(两道重复) #256. 粉刷房子 第八道、#256. 粉刷房子 假如有一排房子,共 n 个,每个房子可以被粉刷成红色、蓝色或者绿色这三种颜色中的一种,你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相同。 当然,因为市场上不同颜色油漆的价格不同,所以房子粉刷成不同颜色的花费成本也是不同的。每个房子粉刷成不同颜色的花费是以一个 n x 3 的矩阵来表示的。 例如,costs[0][0] 表示第 0 号房子粉刷成红色的成本花费;costs[1][2] 表示第 1 号房子粉刷成绿色的花费,以此类推。请你计算出粉刷完所有房子最少的花费成本。 注. 阅读详情

相关推荐

K8s认证文件丢失的应急处理与恢复策略

本文详细介绍了Kubernetes(K8s)认证文件丢失时的应急处理与恢复策略。从快速诊断问题范围到不同场景的临时解决方案,再到深度恢复方案(无损重建、部分重置、完全重建),提供了全面的操作指南。同时强调了生产环境中的防丢失设计、高可用集群的特殊处理以及日常运维建议,帮助运维人员有效应对认证文件丢失的紧急情况。

weixin_33743248的博客 327

C++的unordered_map使用

一、原理介绍 unordered_map: unordered_map内部实现了一个哈希表(也叫散列表),通过把关键码值映射到Hash表中一个位置来访问记录。但其元素的排列顺序是无序的。哈希表最大的优点,就是把数据的存储和查找消耗的时间大大降低,查找的时间复杂度可达到O(1),其在海量数据处理中有着广泛应用;而代价仅仅是消耗比较多的内存。然而在当前可利用内存越来越多的情况下,用空间换时间的做法是值得的。另外,编码比较容易也是它的特点之一。 其基本原理是:使用一个下标范围比较大的数组来存储元素。可以设计一

sinat_31608641的博客 2594

(Cascade extended state observer)级联ADRC的simulink仿真和程序---送给中国研究学者的精华版

(Cascade extended state observer)级联ADRC的simulink仿真和程序---送给中国研究学者的精华版

weixin_44312889的博客 3778

(C++)Leetcode狂刷200题——标签“数组篇--简单难度10道 #167. 两数之和 II - 输入有序数组

第十题、#167. 两数之和 II - 输入有序数组 给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。 函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。 说明: 返回的下标值(index1 和 index2)不是从零开始的。 你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。 示例: 输入: numbers = [2, 7, 11, 15], target = 9 输出: [1,2] 解释: 2 与 7 之和.

electrical_engineer0的博客 236

《YOLOv8实例分割实战:训练自己的数据集 》(视频课程)

本课程将手把手地教大家使用labelme标注和使用YOLOv8训练自己的数据集,完成一个多目标实例分割实战项目。

bai666ai的博客 790

四足机器人如何用对抗运动先验(AMP)实现复杂地形行走?Unitree Go1实战解析

本文深入解析了四足机器人Unitree Go1如何通过对抗运动先验(AMP)算法实现复杂地形行走。AMP结合模仿学习与对抗训练,使机器人仅凭本体感知就能适应未知地形。文章详细介绍了AMP的核心架构、仿真训练工程实践以及在Unitree Go1上的部署优化方案,展示了其在极端地形下的卓越性能表现。

weixin_29050513的博客 327

(C++)Leetcode狂刷200题——标签“数组篇--简单难度10道 #561. 数组拆分 I

第八题、#561. 数组拆分 I 给定长度为 2n 的数组, 你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), …, (an, bn) ,使得从1 到 n 的 min(ai, bi) 总和最大。 示例 1: 输入: [1,4,3,2] 输出: 4 解释: n 等于 2, 最大总和为 4 = min(1, 2) + min(3, 4). 提示: n 是正整数,范围在 [1, 10000]. 数组中的元素范围在 [-10000, 10000]. 来源:力扣(LeetCode) 链.

electrical_engineer0的博客 195

告别老旧内核!手把手教你为Android 10设备手动更新WebView(以升级至97版为例)

本文详细指导如何在Android 10设备上手动更新WebView至97版,解决老旧内核导致的兼容性、性能和安全问题。通过ADB命令和图形化操作两种方案,无需Root即可完成升级,显著提升网页加载速度和安全性。

weixin_28672681的博客 582

(C++)Leetcode狂刷200题——标签“数组篇--简单难度10道 #169. 多数元素

第九道、#169. 多数元素 给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例 1: 输入: [3,2,3] 输出: 3 示例 2: 输入: [2,2,1,1,1,2,2] 输出: 2 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/majority-element 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出.

electrical_engineer0的博客 182

comsol如何实现五厚度的单元模拟?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 470

UDS自动化测试-Service 0x27(CAPL调用dll实现key计算)

相信读者基于Diagnostic/ISO TP Confighration中cdd、dll文件的测试并不陌生,本文基于其的基础上,介绍在capl中调用内置的函数diagGenerateKeyFromSeed实现27服务解锁,从而进行诊断自动化测试。本文基于4个byte的Seed、16个byte的Key的安全访问,实现27服务的自动化测试。需要加载项目使用的cdd文件,如果没有的情况下可以使用canoe例程中默认的cdd文件。

诊断协议那些事儿's blog 2054

(C++)Leetcode狂刷200题——标签“哈希表篇--简单难度10道 #136. 只出现一次的数字

第二道、#136. 只出现一次的数字 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 说明: 你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗? 示例 1: 输入: [2,2,1] 输出: 1 示例 2: 输入: [4,1,2,1,2] 输出: 4 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/single-number 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请.

electrical_engineer0的博客 217

Vibe Coding 实战指南:用 3 类社区资源实现每周高效追新

介绍一种分层技术雷达校准方法,通过领域过滤器(L1技术栈锚定、L2能力映射、L3场景收敛)精准筛选AI编程相关更新,结合可验证的Shell命令与CI任务卡,将信息过载压缩为可执行、可审计的工程实践。

weixin_27251469的博客 330

(C++)Leetcode狂刷200题——标签“数组篇--简单难度10道 #53最大子序和”

第二题 #53 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。 进阶: 如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/maximum-subarray 1、暴力解法 :时间复杂度O

electrical_engineer0的博客 221

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

(C++)Leetcode狂刷200题——标签“数组篇--简单难度10道 #88. 合并两个有序数组

第六题、#88. 合并两个有序数组 (双指针) 方法一、(头插“尾”法)、时间复杂度O(n+m) 、空间复杂度O(1) 将nums2的头部元素插入到nums1的第一个空位置,然后冒泡放入合适位置 class Solution { public: void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) { for(int i = 0; i < n; i++){

electrical_engineer0的博客 174

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

(C++)Leetcode狂刷200题——标签“数组篇--简单难度10道 #26删除排序数组中的重复项”

第三题 #26删除排序数组中的重复项 1、直接解法 时间复杂度为O(n^2),空间复杂度为O(1) 这种方法很好理解但是速度很慢,不太建议使用;但该方法同样适用无序数组 class Solution { public: int removeDuplicates(vector<int>& nums) { int nums_size = nums.size(); for(int i = 0; i < nums_size; i++){ /

electrical_engineer0的博客 141

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

(C++)Leetcode狂刷200题——标签“数组篇--简单难度10道 #717 1比特与2比特字符

第四道题 #717 1比特与2比特字符 1、简单解法 时间复杂度:O(n)。空间复杂度:O(1)。 对bits 数组从左到右扫描来判断最后一位是否为一比特字符(扫描到数组的倒数第二位即可,因为要通过最后的i的值来判断结果)。当扫描到第 i位时,如果 bits[i]=1,那么说明这是一个两比特字符,将 i 的值增加 2。如果bits[i]=0,那么说明这是一个一比特字符,将 i的值增加 1。如果 i最终落在了bits_size−1 的位置,那么说明最后一位一定是一比特字符。 class Solutio

electrical_engineer0的博客 205

(C++)Leetcode狂刷200题——标签“哈希表篇--简单难度10道 #349. 两个数组的交集

第四道、#349. 两个数组的交集 给定两个数组,编写一个函数来计算它们的交集。 示例 1: 输入:nums1 = [1,2,2,1], nums2 = [2,2] 输出:[2] 示例 2: 输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4] 输出:[9,4] 说明: 输出结果中的每个元素一定是唯一的。 我们可以不考虑输出结果的顺序。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/intersection-of-two-.

electrical_engineer0的博客 174

(C++)Leetcode狂刷200题——标签“字符串篇--简单难度10道 #14. 最长公共前缀

第四题、#14. 最长公共前缀 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 “”。 示例 1: 输入: [“flower”,“flow”,“flight”] 输出: “fl” 示例 2: 输入: [“dog”,“racecar”,“car”] 输出: “” 解释: 输入不存在公共前缀。 说明: 所有输入只包含小写字母 a-z 。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/longest-common-pre.

electrical_engineer0的博客 204

(C++)Leetcode狂刷200题——标签“字符串篇--简单难度10道 #13. 罗马数字转整数

第一道、#13. 罗马数字转整数 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 .

electrical_engineer0的博客 204

(C++)Leetcode狂刷200题——标签“动态规划篇--简单难度10道(两道重复) #198. 打家劫舍

第五道、#198. 打家劫舍 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。 示例 1: 输入:[1,2,3,1] 输出:4 解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。 偷窃到的最高金额 = 1 + 3 = 4 。 示例.

electrical_engineer0的博客 206

(C++)Leetcode狂刷200题——标签“数组篇--简单难度10道 #118. 杨辉三角

第七题、#118. 杨辉三角 给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。 在杨辉三角中,每个数是它左上方和右上方的数的和。 示例: 输入: 5 输出: [ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1] ] 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/pascals-triangle 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 动态规划方程解法:时间复杂

electrical_engineer0的博客 168

(C++)Leetcode狂刷200题——标签“数组篇--简单难度10道 #121. 买卖股票的最佳时机

第五道题 #121. 买卖股票的最佳时机 1、暴力直接解法 时间复杂度:O(n^2),空间复杂度:O(1)。 class Solution { public: int maxProfit(vector<int>& prices) { int prices_size = prices.size(); if(prices_size == 0) return o; //如果数组为空直接返回0. int MAX = 0; //设置

electrical_engineer0的博客 243

(C++)Leetcode狂刷200题——标签“动态规划篇--简单难度10道(两道重复) #303. 区域和检索 - 数组不可变

第四道、#303. 区域和检索 - 数组不可变 给定一个整数数组 nums,求出数组从索引 i 到 j (i ≤ j) 范围内元素的总和,包含 i, j 两点。 示例: 给定 nums = [-2, 0, 3, -5, 2, -1],求和函数为 sumRange() sumRange(0, 2) -> 1 sumRange(2, 5) -> -1 sumRange(0, 5) -> -3 说明: 你可以假设数组不可变。 会多次调用 sumRange 方法。 来源:力扣(LeetCo.

electrical_engineer0的博客 131

(C++)Leetcode狂刷200题——标签“哈希表篇--简单难度10道 #500. 键盘行

第六道、#500. 键盘行 给定一个单词列表,只返回可以使用在键盘同一行的字母打印出来的单词。键盘如下图所示。 示例: 输入: [“Hello”, “Alaska”, “Dad”, “Peace”] 输出: [“Alaska”, “Dad”] 注意: 你可以重复使用键盘上同一字符。 你可以假设输入的字符串将只包含字母。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/keyboard-row 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载.

electrical_engineer0的博客 197

(C++)Leetcode狂刷200题——标签“字符串篇--简单难度10道 #657. 机器人能否返回原点

第十道题、# #657. 机器人能否返回原点 在二维平面上,有一个机器人从原点 (0, 0) 开始。给出它的移动顺序,判断这个机器人在完成移动后是否在 (0, 0) 处结束。 移动顺序由字符串表示。字符 move[i] 表示其第 i 次移动。机器人的有效动作有 R(右),L(左),U(上)和 D(下)。如果机器人在完成所有动作后返回原点,则返回 true。否则,返回 false。 注意:机器人“面朝”的方向无关紧要。 “R” 将始终使机器人向右移动一次,“L” 将始终向左移动等。此外,假设每次移动机器人的.

electrical_engineer0的博客 259
下一篇: (C++)Leetcode狂刷200题——标签“数组篇--简单难度10道 #53最大子序和”
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值