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;
}
};