HOT100与剑指Offer

ops/2024/9/23 4:07:12/

文章目录

  • 前言
  • 一、560. 和为 K 的子数组(HOT100)
  • 二、17. 从1到n整数中1出现的次数(剑指Offer)
  • 总结


前言

一个本硕双非的小菜鸡,备战24年秋招,计划刷完hot100和剑指Offer的刷题计划,加油!
根据要求,每一道题都要写出两种以上的解题技巧。

一、560. 和为 K 的子数组(HOT100)

560. 和为 K 的子数组
Note:枚举
可以枚举 [0…i]里所有的下标 j 来判断是否符合条件

class Solution {
public:int subarraySum(vector<int>& nums, int k) {int count = 0;for (int start = 0; start < nums.size(); ++start) {int sum = 0;for (int end = start; end >= 0; --end) {sum += nums[end];if (sum == k) {count++;}}}return count;}
};

Note:前缀和 + 哈希表优化
对于[j…i] 这个子数组和为 k,可以转化为:
pre[j- 1]== pre[i] - k
我们建立哈希表 ,以和为键,出现次数为对应的值,记录 pre[i] 出现的次数,从左往右边更新哈希表边计算答案,那么以 i 结尾的答案 即可在 O(1)时间内得到。最后的答案即为所有下标结尾的和为 k 的子数组个数之和。

class Solution {
public:int subarraySum(vector<int>& nums, int k) {int res = 0;int pre = 0;unordered_map<int, int> umap;umap[0] = 1;for (int i = 0; i < nums.size(); i++) {pre += nums[i];if (umap.find(pre - k) != umap.end())res += umap[pre - k];umap[pre]++;}return res;}
};

二、17. 从1到n整数中1出现的次数(剑指Offer)

这题没在acwing中找到

Note:剑指offer的题目
使用字符串来表达大数,并采用第一个字符发生进位来查看是否到达最大值,最后使用碰到第一个非0的字符之后才开始打印。

class Solution {
public:bool Increment(char* num) {bool Index = false;int nOffset = 0;int nLength = strlen(num);for (int i = nLength - 1; i >= 0; i--) {int nSum = num[i] - '0' + nOffset;if (i == nLength - 1)nSum++;if (nSum >= 10) {if (i == 0)Index = true;else {nSum -= 10;nOffset = 1;num[i] = '0' + nSum;}}else {num[i] = '0' + nSum;break;}}return Index;}void printNum(char* num) {bool Index = true;int nLength = strlen(num);for (int i = 0; i < nLength; i++) {if (Index && num[i] != '0')Index = false;if (!Index)printf("%c", num[i]);}printf("\t");}int numberOf1Between1AndN_Solution(int n) {if (n <= 0) return -1;char *num = new char[n + 1];memset(num, '0', n);num[n] = '\0';while (!Increment(num)) {printNum(num);}delete[] num;}
};

Note:翻转数组

class Solution {
public:vector<int> printListReversingly(ListNode* head) {vector<int> res;while (head != nullptr) {res.push_back(head->val);head = head->next;}reverse(res.begin(), res.end());return res;}
};

总结

祝大家都能学有所成,找到一份好工作!


http://www.ppmy.cn/ops/45766.html

相关文章

分形之科赫雪花

前言 分形是一种具有自相似性的几何图形或数学对象。它的特点是无论在任何放大或缩小的尺度下,都能够看到与整体相似的图形。分形的形状可以非常复杂,常常具有分支、重复的图案,以及细节层次丰富的结构。 分形在自然界中广泛存在,如云朵、树枝、山脉、海岸线等,它们都展…

深入理解 Spring Boot 注解:核心功能与高级用法详解

深入理解 Spring Boot 注解&#xff1a;核心功能与高级用法详解 Spring Boot 是一种用来简化新 Spring 应用的初始搭建及开发过程的框架&#xff0c;采用大量注解来减少配置和加速开发。本文将详细介绍 Spring Boot 常用的注解及其应用&#xff0c;帮助开发者更好地理解和使用…

【C语言】基于C语言实现的贪吃蛇游戏

【C语言】基于C语言实现的贪吃蛇游戏 &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;C语言学习之路 文章目录 【C语言】基于C语言实现的贪吃蛇游戏前言一.最终实现效果一.Win32 API介绍1.1Win32 API1.2控制台程序1.3控制台屏幕上的坐标COORD…

SpringMVC框架学习笔记(二):@RequestMapping 注解的各种用法

1 基本使用 RequestMapping 注解可以指定控制器/处理器的某个方法的请求的 url&#xff0c;如下 RequestMapping(value "/login") public String login(){} 2 RequestMapping 注解其它使用方式 1.1 RequestMapping 可以修饰方法和类 说明 : RequestMapping 注解可…

2024.5.31学习记录

1、面经复习&#xff1a;webpack 2、rosebush 开发完成&#xff1a; rosebush官网

一起聊聊分布式系统的CAP定理

引言 在当今的数字化时代&#xff0c;分布式系统已经成为支撑现代互联网服务的基石。它们允许多个计算机协同工作&#xff0c;提供可扩展、高可用的服务。然而&#xff0c;分布式系统的设计和实现面临着一个著名的理论挑战——CAP定理。CAP定理指出&#xff0c;在分布式系统中…

php反序列化学习(2)

1、魔术方法触发规则&#xff1a; 魔术方法触发的前提是&#xff1a;魔法方法所在类&#xff08;或对象&#xff09;被调用 分析代码&#xff0c;_wakeup()的触发条件是进行反序列化&#xff0c;_tostrinng()触发的条件是把对象当成字符串调用&#xff0c;但是魔术方法触发的前…

C#数据类型变量、常量

一个变量只不过是一个供程序操作的存储区的名字。 在 C# 中&#xff0c;变量是用于存储和表示数据的标识符&#xff0c;在声明变量时&#xff0c;您需要指定变量的类型&#xff0c;并且可以选择性地为其分配一个初始值。 在 C# 中&#xff0c;每个变量都有一个特定的类型&…