剑指offer第九天

server/2024/11/13 8:48:19/

1.数组中只出现一次的两个数

#include <vector>
class Solution {
public:vector<int> FindNumsAppearOnce(vector<int>& nums) {// write code hereint v = 0;for(int&x:nums)v^=x;int cnt = 0;while(v){v>>=1;cnt++;}int a = 0,b = 0;for(int&x:nums){if(x&(1<<(cnt-1)))a^=x;else b^=x;}return vector<int>{min(a,b),max(a,b)};}
};

2.求1+2+…+n

class Solution {
public:int getSum(int n) {return 1ll*n*(n+1)/2;}
};

3.顺时针打印矩阵

class Solution {
public:vector<int> printMatrix(vector<vector<int> > matrix) {vector<int> res;int n = matrix.size();//先排除特殊情况if(n == 0) return res;//左边界int left = 0; //右边界int right = matrix[0].size() - 1; //上边界int up = 0; //下边界int down = n - 1; //直到边界重合while(left <= right && up <= down){ //上边界的从左到右for(int i = left; i <= right; i++) res.push_back(matrix[up][i]); //上边界向下up++; if(up > down)break;//右边界的从上到下for(int i = up; i <= down; i++) res.push_back(matrix[i][right]);//右边界向左right--; if(left > right)break;//下边界的从右到左for(int i = right; i >= left; i--) res.push_back(matrix[down][i]);//下边界向上down--; if(up > down)break; //左边界的从下到上for(int i = down; i >= up; i--) res.push_back(matrix[i][left]);//左边界向右left++; if(left > right)break;}return res;}
};

4.扑克牌顺子

class Solution {bool hash[14] = { 0 };public:bool IsContinuous(vector<int>& numbers) {int maxVal = 0, minVal = 14;for (int& x : numbers) {if (x) {if (hash[x]) return false;hash[x] = true;maxVal = max(maxVal, x);minVal = min(minVal, x);}}return maxVal - minVal <= 4;}
};

5.构建乘积数组

class Solution {
public:vector<int> multiply(vector<int>& A) {// write code here//看起来数值比较小,可以直接使用暴力的做法去乘int n = A.size();vector<int>ans(n,1);for(int i = 0;i<n;++i){for(int j = 0;j<n;++j){if(j == i)continue;ans[i] *= A[j];}}return ans;}
};

6.字符串中第一次只出现一次的字符

class Solution {int cnt[128]{};
public:char firstNotRepeatingChar(string s) {for(char&c:s)cnt[c]++;for(char&c:s)if(cnt[c]==1)return c;return '#';}
};

7.替换空格

# -*- coding:utf-8 -*-
class Solution:# s 源字符串def replaceSpace(self, s):return "%20".join(list(s.split(' ')))

http://www.ppmy.cn/server/140836.html

相关文章

UE5.1 控制台设置帧率

仅个人记录&#xff0c;未经过严格验证。 也可通过控制台命令蓝图节点&#xff0c;在运行时执行 锁帧&#xff1a; 0->120帧 1-》60帧

【报错解决】使用@SpringJunitConfig时报空指针异常

报错描述 具体的报错如下图所示&#xff1a; 我的测试代码如下&#xff1a; import config.StudentConfig; import controller.StudentController; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test…

Java学习篇之JVM 调优

Java学习篇之JVM 调优 一、JVM 是什么&#xff1f;二、JVM 官方参数建议三、JVM调优的场景四、如何监控JVM五、JVM调优的流程步骤1. 明确优化目标2. 监控和分析3. 确定调优参数4. 实施调优策略5. 持续观察和调整6. 定期评估和优化 一、JVM 是什么&#xff1f; JVM&#xff0c;…

1.62亿元!812个项目立项!上海市2024年度“科技创新行动计划”自然科学基金项目立项

本期精选SCI&EI ●IEEE 1区TOP 计算机类&#xff08;含CCF&#xff09;&#xff1b; ●EI快刊&#xff1a;最快1周录用&#xff01; 知网(CNKI)、谷歌学术期刊 ●7天录用-检索&#xff08;100%录用&#xff09;&#xff0c;1周上线&#xff1b; 免费稿件评估 免费匹配期…

如何在 IntelliJ IDEA 中调整 `Ctrl+/` 快捷键生成注释的位置

前言 在使用 IntelliJ IDEA 编写代码时&#xff0c;注释是代码可读性和维护性的重要组成部分。IDEA 提供了快捷键 Ctrl/ 用于快速生成单行注释。然而&#xff0c;默认情况下&#xff0c;使用此快捷键生成的注释会出现在行首&#xff0c;导致注释与代码之间存在较大的空格&…

electron 中 ipcRendererEvent 作用

1. 理解 IPC&#xff08;进程间通信&#xff09;的背景和重要性 在 Electron 应用中&#xff0c;主进程和渲染进程是相互隔离的。这种隔离有助于提高应用的安全性和稳定性&#xff0c;但也需要一种有效的通信机制来协同工作。 IPC&#xff08;进程间通信&#xff09;就是用于…

【Linux系统编程】线程--概念

目录 理解线程 进程与线程的本质与关系 CPU调度 页表 页表的映射 进程代码段如何划分给多个线程&#xff1f; 线程的优缺点 理解线程 首先我们对于线程的切入点是从操作系统教材中对线程和进程的定义入手 线程&#xff1a;线程是进程内部的一个执行分支&#xff0c;是…

抽象工厂模式详解

1. 引言 1.1 设计模式概述 设计模式&#xff08;Design Patterns&#xff09;是软件开发中解决常见问题的一种最佳实践。它们通过总结经验&#xff0c;提供了一套被验证有效的代码结构和设计原则&#xff0c;帮助开发者提高代码的可维护性、可重用性和可扩展性。 设计模式主…