首页 > 其他分享 >Offer68题 Day1

Offer68题 Day1

时间:2024-10-20 16:20:37浏览次数:1  
标签:ListNode string int Solution Offer68 next ans Day1

LCR 120. 寻找文件副本

class Solution { // offer 03
public:
    int findRepeatDocument(vector<int>& documents) { // 方法:哈希表,查找元素是否存在
        unordered_set<int> vsi;
        for(int i=0;i<documents.size();i++){
            if(vsi.count(documents[i])){return documents[i];} // count()>0说明已经出现过
            vsi.insert(documents[i]);  // set中没有就放入
        }
        return -1;  // 时间O(n) , 空间O(n),n为doc.size()
    }
};

//////////////////////////////////////////////////////////////////////
// 排序后,判断相邻是否相等?时间O(nlog),空间O(logn)
class Solution {
public:
	int findRepeatDocument(vector<int>& documents) {
		sort(documents.begin(),documents.end());
		for(int i=0;i<documents.size();i++){
			if(documents[i]==documents[i+1]){return documents[i];}
		}
        return -1;
	}
};

240. 搜索二维矩阵 II

class Solution {  // 从左下开始找,时间O(m+n),mn问matrix行数列数,空间O(1)
public:
    bool searchMatrix(vector<vector<int>>& matrix, int target) {
        int i=matrix.size()-1;   // 最后一行
        int j=0;                 // 第一列
        while(i>=0 && j<matrix[0].size()){
            if(matrix[i][j]==target) return true;
            else if(matrix[i][j]>target) i--;   // 说明右边都比target大,往上一行找
            else j++;                           // < 要往右边找
        }
        return false;
    }
};

/*
vector<vector<int>> matrix = {
    {1, 2, 3, 4},
    {5, 6, 7, 8},
    {9, 10, 11, 12}
};

matrix.size() 将返回 3,因为有三行。
matrix[0].size() 将返回 4,因为第一行有四个元素。
*/

LCR 122. 路径加密(单个字符替换)

class Solution {
public:
    string pathEncryption(string path) {
        string ans=path;  // 创建path副本
        for(auto& c:ans){
            if(c=='.'){ c=' ';}
        }
        return ans;
    }
};

类似:面试题 05. 替换空格 (多个字符替换)

题目描述: 请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
示例 1:
输入:s = "We are happy."
输出:"We%20are%20happy."


#include <iostream>
#include <string>
using namespace std;

class Solution {
public:
	string replaceSpace(string s) {
		string ans;
		for (const char& c : s) {               // 遍历输入字符串 s
			if (c == ' ') {	ans += "%20"; } // 替换空格为 "%20"
			else { ans += c; }              // 其他字符直接追加到string
		}
		return ans;
	}
};

int main() {
	const string s = "We are happy.";
	Solution sol;
	const string result = sol.replaceSpace(s);
	cout << result << endl; // 输出: "We%20are%20happy."
	return 0;
}

LCR 123. 图书整理 I 或 从尾到头打印链表

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {  // 将链表元素放入数组,反转数组
public:
    vector<int> reverseBookList(ListNode* head) {
        vector<int> result;
        ListNode* curr=head;
        while(curr!=nullptr){
            result.push_back(curr->val);
            curr=curr->next;
        }
        reverse(result.begin(),result.end());
        return result;
    }
};

标签:ListNode,string,int,Solution,Offer68,next,ans,Day1
From: https://www.cnblogs.com/albertmak/p/18487441

相关文章

  • Day19--可变参数
    Day19--可变参数从JDK1.5开始,Java支持传递同类型的可变参数给一个方法。在方法声明中,在指定参数类型后加一个省略号(...)。一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。任何普通的参数必须在它之前声明。有时候,代码里面的方法重载有很多,看着很繁琐,这就需要......
  • java_day19_线程组、线程池、定时器、InetAddress、网络编程、设计模式
    一、线程组:线程组:将属于同一类的线程划分到同一组中,可以直接对线程组进行设置。ThreadGroup构造方法:ThreadGroup(Stringname)构造一个新的线程组。代码案例:classMyThread1extendsThread{publicMyThread1(){}publicMyThread1(ThreadGr......
  • Java 初学 day16
    java161、IO流按照流向划分:输入流:外部数据->java程序输出流:java程序->外部数据按照数据类型划分【根据使用记事本打开是否能够看懂来决定】:字节流【万能流】:字节输出流:OutputStream(抽象类)-FileOutputStream(实现......
  • day19
    线程组线程组:将属于同一类的线程划分到同一组中,可以直接对线程组进行设置。ThreadGroup构造方法:ThreadGroup(Stringname)构造一个新的线程组。classMyThread1extendsThread{publicMyThread1(){}publicMyThread1(ThreadGrou......
  • Day18--命令行传递参数
    Day18--命令行传递参数命令行传参有时候你希望运行一个程序的时候再传递给它消息。这要靠传送命令行参数给main()函数实现。publicclassCommandLine{publicstaticvoidmain(Stringargs[]){for(inti=0;i<args.length;i++){System.out.println("......
  • java_day18_多线程、线程安全问题、死锁、等待唤醒机制
    一、线程1、多线程进程:是系统进行资源分配和调用的独立单位,每一个进程都有它自己的内存空间和系统资源。举例:IDEA,阿里云盘,wegame,steam线程:是进程中的单个顺序控制流,是一条执行路径一个进程如果只有一条执行路径,则称为单线程程序。一个进程如果有多条执行......
  • day17
    JDBCJDBC编写六步走:1、注册驱动,告诉java程序我们要链接什么数据库【mysql为案例】5.1.x驱动包中的驱动类路径:【com.mysql.jdbc.Driver】8.x.x驱动包中的驱动类路径:【com.mysql.cj.jdbc.Driver】2、创建与数据库的链接对象3、......
  • Java 初学 day15
    java151、CollectionsCollections:是java针对集合操作专门提供的一个工具类静态方法publicstatic<T>voidsort(List<T>list)publicstatic<T>intbinarySearch(List<?>list,Tkey)publicstatic<T>Tmax(Collection<?>coll)publicstaticvoi......
  • day16
    IO流IO流【输入输出流】:按照流向划分:输入流:外部数据->java程序输出流:java程序->外部数据按照数据类型划分【根据使用记事本打开是否能够看懂来决定】:字节流【万能流】:字节输出流:......
  • java_day17_JDBC、登录注册修改案例
    一、JDBCJDBC编写六步走:1、注册驱动,告诉java程序我们要链接什么数据库【mysql为案例】5.1.x驱动包中的驱动类路径:【com.mysql.jdbc.Driver】8.x.x驱动包中的驱动类路径:【com.mysql.cj.jdbc.Driver】2、创建与数据库的链接对象......