个人学习编程(3-18) leetcode刷题
爬楼梯:
假设你正在爬楼梯。需要
n阶你才能到达楼顶。每次你可以爬
1或2个台阶。你有多少种不同的方法可以爬到楼顶呢?示例 1:
输入:n = 2 输出:2 解释:有两种方法可以爬到楼顶。 1. 1 阶 + 1 阶 2. 2 阶示例 2:
输入:n = 3 输出:3 解释:有三种方法可以爬到楼顶。 1. 1 阶 + 1 阶 + 1 阶 2. 1 阶 + 2 阶 3. 2 阶 + 1 阶
#include <stdio.h>int climbStairs(int n) {if (n == 1) {return 1;}int dp[n + 1]; // 用来存储爬楼梯的方法数dp[0] = 1; // 从地面到第0阶只有一种方式dp[1] = 1; // 到第1阶也只有一种方式for (int i = 2; i <= n; i++) {dp[i] = dp[i - 1] + dp[i - 2]; // 每次可以选择从 i-1 阶或者 i-2 阶到达}return dp[n]; // 返回爬到第 n 阶的方法数
}int main() {int n;printf("请输入楼梯的总阶数 n:");scanf("%d", &n);int result = climbStairs(n);printf("爬到第 %d 阶楼顶的方法数是: %d\n", n, result);return 0;
}
多数元素:
给定一个大小为
n的数组nums,返回其中的多数元素。多数元素是指在数组中出现次数 大于⌊ n/2 ⌋的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。
示例 1:
输入:nums = [3,2,3] 输出:3示例 2:
输入:nums = [2,2,1,1,1,2,2] 输出:2
双重循环(不能过全部):
arr[nums[i]]来将 数组一的值当做本数组的下标,本数组的值,为上个数组出现的次数,然后只需要遍历值的大小,最后把本数组最大值对应的下标i 返回,即使上个数组最大出现次数的值。
问题:
负数索引问题:你需要处理负数值的情况。由于数组索引不能是负数,可以通过调整数组索引的方法来处理负数。
- 你可以将每个元素值
nums[i]加上一个常量值,使得所有索引变为正数。比如,arr[nums[i] + 500000]可以把负数映射到正数索引。- 这样,
nums[i]的值范围 [-1000000, 1000000] 会映射到arr数组的索引范围 [0, 1000000]。代码逻辑改进:在循环中,你只需要更新每个元素的出现次数,而不是每次都重置
count,并且你应该避免重复存储。
#include <stdio.h>int majorityElement(int* nums, int numsSize) {int count;int times = numsSize / 2;int arr[1000001] = {0}; // 调整数组大小int index = 0;int max = 0;for (int i = 0; i < numsSize; i++) {// 处理负数索引问题:将nums[i]映射到正数索引int idx = nums[i] + 500000; // 偏移值,使索引始终为正arr[idx]++; // 直接增加出现次数// 记录最大出现次数if (arr[idx] > max) {max = arr[idx];index = nums[i];}}return index;
}int main() {int nums[] = {-1, 1, 1, 1, 2, 1};int numsSize = 6;printf("Majority Element: %d\n", majorityElement(nums, numsSize));return 0;
}
摩尔投票法:
#include <stdio.h>int majorityElement(int* nums, int numsSize) {int count = 0;int candidate = 0;// 摩尔投票法for (int i = 0; i < numsSize; i++) {if (count == 0) {candidate = nums[i]; // 找到新的候选元素}count += (nums[i] == candidate) ? 1 : -1; // 如果是候选元素,计数加 1,否则减 1}return candidate; // 最终候选元素即为多数元素
}int main() {int nums[] = {3, 2, 3};int numsSize = 3;printf("Majority Element: %d\n", majorityElement(nums, numsSize));int nums2[] = {2, 2, 1, 1, 1, 2, 2};int numsSize2 = 7;printf("Majority Element: %d\n", majorityElement(nums2, numsSize2));return 0;
}
买卖股票的最佳时机:
给定一个数组
prices,它的第i个元素prices[i]表示一支给定股票第i天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。
返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回
0。示例 1:
输入:[7,1,5,3,6,4] 输出:5 解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。示例 2:
输入:prices = [7,6,4,3,1] 输出:0 解释:在这种情况下, 没有交易完成, 所以最大利润为 0。
#include <stdio.h>
#include <bits/stdc++.h>int maxProfit(int* prices, int pricesSize) {int i;int min = prices[0]; // 初始化最小买入价格为第一个价格int max_profit = 0; // 初始化最大利润为0for (i = 1; i < pricesSize; i++) { // 从第二天开始if (prices[i] < min) {min = prices[i]; // 如果当前价格低于最小价格,更新最小价格} else {// 计算当前价格和最小价格的利润,并更新最大利润int profit = prices[i] - min;if (profit > max_profit) {max_profit = profit;}}}return max_profit; // 返回最大利润
}int main() {int nums[6] = {7, 1, 5, 3, 6, 4};int m = maxProfit(nums, 6);printf("%d\n", m); // 输出最大利润return 0;
}
SingleNumber:
找到数组当中的单一的数字
双重循环:
#include <stdio.h>
#include <bits/stdc++.h>int singleNumber(int *nums,int numsSize){int i,j;for (int i = 0; i < numsSize; i++){//printf("%d\n",nums[i]);int count = 0;for (j = 0; j < numsSize; j++){if (nums[j] == nums[i]){count++;}}if (count == 1){return nums[i];}}return -1;
}
int main() {int arr[]={2,2,3,3,5};int singleNumber(int *nums,int numsSize);int a = singleNumber(arr,5);printf("%d\n",a);
}
亦或:
#include <stdio.h>
#include <bits/stdc++.h>int singleNumber(int *nums,int numsSize){int n = nums[0];int i;for(i = 1;i < numsSize;i++){n ^= nums[i];}return n;//因为亦或,相同的元素亦或就是0,0亦或任何数还是任何数
}
int main() {int arr[]={2,2,3,3,5};int singleNumber(int *nums,int numsSize);int a = singleNumber(arr,5);printf("%d\n",a);
}
找一个数列的子序列的最大值
双重循环:
#include <stdio.h>
#include <bits/stdc++.h>int maxSubArray(int* nums,int numsSize){int max = nums[0];printf("i j : sum\n ---------");int i,j,k;for (i = 0;i < numsSize; i++){for ( j = 0; j < numsSize; j++){int sum = 0;for (int k = i; k < j; k++){sum += nums[k];}if (sum > max){max = sum;}printf("%d %d : %2d (%d)\n",i,j,sum,max);}}return max;
}int main() {int maxSubArray(int* num,int numsSize);int arr[] = {-2,1,-3,4,-1,2,1,-5,4};int max = arr[0];max = maxSubArray(arr,9);printf("%d",max);
}
记录最大值:
for (int i = 0; i < numsSize; i++){
for (int j = i; j < numsSize; j++){
sum += nums[j];
if (sum > max){
max = sum;
}
}}
这段代码会记录从 i=0到numsSize-1的位置,再到 i=1到numsSize-1位置,慢慢记录他们的和赋值给max。
#include <stdio.h>
#include <bits/stdc++.h>int maxSubArray(int* nums,int numsSize){int max = nums[0];for (int i = 0; i < numsSize; i++){int sum = 0;for (int j = i; j < numsSize; j++){sum += nums[j];if (sum > max){max = sum;}}}return max;
}int main() {int maxSubArray(int* num,int numsSize);int arr[] = {-2,1,-3,8,-1,2,1,-5,4};int max = arr[0];max = maxSubArray(arr,9);printf("%d",max);
}
相关文章:
个人学习编程(3-18) leetcode刷题
爬楼梯: 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 示例 1: 输入:n 2 输出:2 解释:有两种方法可以爬到楼顶。 1. 1 阶 1 阶 2. 2 …...
【css酷炫效果】纯CSS实现立体旋转立方体
【css酷炫效果】纯CSS实现立体旋转立方体 缘创作背景html结构css样式完整代码效果图 想直接拿走的老板,链接放在这里:https://download.csdn.net/download/u011561335/90492014 缘 创作随缘,不定时更新。 创作背景 刚看到csdn出活动了&am…...
Android Fresco 框架兼容模块源码深度剖析(六)
Android Fresco 框架兼容模块源码深度剖析 一、引言 在 Android 开发的多元环境中,兼容性是衡量一个框架优劣的重要指标。Fresco 作为一款强大的图片加载框架,其兼容模块在确保框架能在不同 Android 版本、不同设备和不同图片格式下稳定运行方面发挥着…...
ABSD基于架构的软件设计
基于架构的设计(ABSD)Architecture-Based Software Design是一种软件设计方法,强调软件架构设计应该由商业、质量和功能需求共同驱动。这种方法允许设计活动在明确项目总体功能框架的前提下开始,并且需求抽取和分析活动应与设计活…...
LLM中lora的梯度更新策略公式解析
LLM中lora的梯度更新策略公式解析 目录 LLM中lora的梯度更新策略公式解析区别如何使用LoRA代码中的参数更新方式二阶导数(如右侧公式关联的Fisher信息)的作用区别 定义与理论来源: 左公式 F ( w i ) = 1 n...
开源数据仓库全解 — 从原理到实践
🎯 一、什么是数据仓库? 数据仓库(Data Warehouse,简称 DW)是面向分析和决策的专门数据存储系统,旨在整合来自多个源的数据,支持复杂查询和大规模分析任务。 特点包括: 面向主题&…...
Mac下Ollama安装全攻略:开启本地大模型之旅
文章目录 Mac下Ollama安装全攻略:开启本地大模型之旅一、Ollama 是什么功能特点优势应用场景 二、安装前准备(一)系统要求(二)硬件要求 三、下载安装包(一)官网下载(二)其…...
线程大乱斗:从入门到精通,解锁Java并发编程的终极秘籍
目录 什么是线程? jave创建线程方式有几种? 线程中常用的方法 线程状态 多线程 解决线程安全问题 线程通信 何为并发编程? 并发执行和并行执行 线程的三个主要问题: 1、不可见性: 2、乱序性: …...
Web3游戏行业报告
一,gamefi经济 什么是gamefi GameFi是一个缩写,它结合了游戏和去中心化金融(“DeFi”)这两个术语,关注的是游戏玩法如何在去中心化系统中实现货币化。对于游戏而言,只要开放了交易市场,允许玩家自由买卖,…...
hibernate 自动生成数据库表和java类 字段顺序不一致 这导致添加数据库数据时 异常
hibernate 自动生成的数据库表和java类 字段顺序不一致 这导致该书写方式添加数据库数据时 异常 User user new User( null, username, email, phone, passwordEncoder.encode(password) ); return userRepository.save(user);Hibernate 默认不会保证数据库表字段的顺序与 Ja…...
bbbbb
import java.util.ArrayList; import java.util.List; public class KthPermutation { public static String getPermutation(int n, int k) { // 计算阶乘 int[] factorial new int[n]; factorial[0] 1; for (int i 1; i < n; i) …...
《基于Workspace.java的Launcher3改造:HotSeat区域动态阻断文件夹生成机制》
1. 需求背景与技术挑战 在Android 13系统Launcher3定制化开发中,需实现禁止HotSeat区域创建文件夹的功能。原始逻辑中,当用户拖拽应用图标至HotSeat区域相邻图标时,会触发FolderIcon的实例化。本文将深入分析Launcher3的文件夹创建机制&…...
Cursor在内网环境配置自定义DeepSeek API
关键字 Cursor、DeepSeek、API配置、内网代理、HTTP/2 背景环境 使用Cursor集成环境开发程序。但是我使用公司的内网并不能使用cursor自带的模型,于是我就想使用DeepSeek官方的API服务。 环境:Windows 11系统 解决过程 网络检测 首先进行环境检测&am…...
【数据库】掌握MySQL事务与锁机制-数据一致性的关键
在数据库的世界里,数据就是一切。而确保数据的准确性和一致性,则是数据库系统的核心任务之一。想象一下,如果没有合适的机制,当多个用户同时试图修改同一条数据时,会发生什么? chaos(混乱&#…...
在Vue3中使用$router.push方法进行路由跳转时,如何传递多个路径参数?
在 Vue 3 里,你可以借助 $router.push 方法进行路由跳转,同时传递多个路径参数。下面为你详细介绍具体实现方式: 1. 路由配置 首先,要在路由配置中定义好需要的路径参数。示例如下: import { createRouter, createW…...
【初学者】解释器和脚本各是什么?有什么区别与联系?
李升伟 整理 解释器和脚本的定义 1. 解释器(Interpreter) 定义:解释器是一个程序,负责逐行读取并执行代码。它将源代码翻译成机器能理解的指令,并立即执行。特点: 逐行执行代码。适合交互式编程…...
Kafka跨集群数据备份与同步:MirrorMaker运用
#作者:张桐瑞 文章目录 前言MirrorMaker是什么运行MirrorMaker各个参数的含义 前言 在大多数情况下,我们会部署一套Kafka集群来支撑业务需求。但在某些特定场景下,可能需要同时运行多个Kafka集群。比如,为了实现灾难恢复&#x…...
AI学习第二天--监督学习 半监督学习 无监督学习
目录 1. 监督学习(Supervised Learning) 比喻: 技术细节: 形象例子: 2. 无监督学习(Unsupervised Learning) 比喻: 技术细节: 形象例子: 3. 半监督学…...
设计模式(创建型)-抽象工厂模式
摘要 在软件开发的复杂世界中,设计模式作为解决常见问题的最佳实践方案,一直扮演着至关重要的角色。抽象工厂模式,作为一种强大的创建型设计模式,在处理创建一系列或相关依赖对象的场景时,展现出了独特的优势和灵活性。它通过提供一个创建对象的接口,让开发者能够在不指定…...
linux系统 Ubuntu22.04安装Nvidia驱动,解决4060系列显卡重启黑屏方法
一、禁用Nouveau 1.查看nouveau lsmod | grep nouveau 2.编辑 blacklist.conf sudo gedit /etc/modprobe.d/blacklist.conf 3.在文件最后加入 blacklist nouveau options nouveau modeset0 4.保存并关闭文件 5.更新 sudo update-initramfs -u 6.重启之后,检…...
观察者模式详解:用 Qt 信号与槽机制深入理解
引言 你是否曾遇到这样的需求:一个对象的状态发生变化后,希望通知其他对象进行相应的更新?比如: 新闻订阅系统:当新闻发布后,所有订阅者都会收到通知。股票行情推送:股价变化时,所…...
OSWorld:开启多模态智能体的真实计算机环境革命
OSWorld:开启多模态智能体的真实计算机环境革命 在人工智能技术突飞猛进的今天,多模态智能体正逐步突破实验室的限制,试图融入人类的日常工作场景。然而,如何评估这些智能体在真实计算机环境中处理开放式任务的能力,成为学术界和产业界共同关注的难题。2024年,由xlang-ai…...
LabVIEW烟气速度场实时监测
本项目针对燃煤电站烟气流速实时监测需求,探讨了静电传感器结构与速度场超分辨率重建方法,结合LabVIEW多板卡同步采集与实时处理技术,开发出一个高效的烟气速度场实时监测系统。该系统能够在高温、高尘的复杂工况下稳定运行,提供高…...
电脑管家如何清理内存及垃圾,提升电脑性能
电脑在长时间使用后,常常会变得越来越卡顿,打开程序的速度变慢,甚至响应迟缓。这时,不少用户会选择使用电脑管家来进行内存清理和垃圾清理。那么,电脑管家是如何清理内存的?它又是如何清理垃圾的࿱…...
强化学习基础篇二:马尔可夫决策过程
写在前面 本文是对李沐等“动手学强化学习”教程的个人阅读总结,原文链接:动手学强化学习。 第3章 马尔可夫决策过程 3.1 重要性 马尔可夫决策过程是强化学习中的基础概念,强化学习中的环境就是一个马尔可夫决策过程,与多臂老虎…...
EtherCAT转profinet网关集成汽车变速箱制造生产线自动化升级
客户的汽车零部件制造商需要升级其变速箱齿轮加工生产线,面临的关键挑战是整合新引进的欧洲齿轮精密检测设备(基于EtherCAT协议)与现有使用profinet协议自动化系统通信。 企业核心控制平台基于西门子PLC,而现场各工位采用分布式I/…...
tongweb7控制台无法访问
tongweb7控制台无法访问 排查 1.首先确认版本,如果版本是轻量级版本,轻量版不支持会话(session)的备份和复制、管理控制台、APM 运维工具等企业级增量功能。 2.查看端口 命令:ss -tnlp 或者netstat -tnlp 确认控制台端口是否开启 3.在conf…...
Spring中的循环依赖问题是什么?
在使用Spring框架进行开发时,可能会遇到一个比较棘手的问题,那就是循环依赖。说到循环依赖,很多人可能会感到有些困惑,难道这个问题真的有那么复杂吗?其实,理解循环依赖并不是很难。我们可以从Spring的依赖…...
【STM32】从新建一个工程开始:STM32 新建工程的详细步骤
STM32 开发通常使用 Keil MDK、STM32CubeMX、IAR 等工具来创建和管理工程。此处是 使用 Keil MDK5 STM32CubeMX 创建 STM32 工程的详细步骤。 新建的标准库工程文件已上传至资源中,下载后即可直接使用。 标准库新建 STM32 工程的基本目录结构:STD_STM…...
基于“动手学强化学习”的知识点(五):第 18 章 离线强化学习(gym版本 >= 0.26)
第 18 章 离线强化学习(gym版本 > 0.26) 摘要SAC 算法部分CQL 算法CQL 总结与大函数意义CQL 总结CQL 类详细分析 摘要 本系列知识点讲解基于动手学强化学习中的内容进行详细的疑难点分析!具体内容请阅读动手学强化学习࿰…...
