題目描述
計算字符串最後一個單詞的長度,單詞以空格隔開。
分析:從字符串最後一個字母開始算,直到讀入遇到空格返回單詞的長度。
#include<iostream>
#include<string>
using namespace std;
int main()
{
int count = 0;
string str;
getline(cin,str);
for (int i = str.length()-1; i >=0;i--)
if (str[i] != ' ')
count++;
else
break;
cout << count;
}
題目描述
在一個二維數組中(每個一維數組的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。
分析:二維數組每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。所以每次判斷只要判斷右上角的元素是否和我們要找的元素相等,如果相等就返回1,否則如果右上角元素小於目標元素,那麼行數就加一,如果大於目標元素,就讓列數減一,直到找到元素爲止。
class Solution {
public:
bool Find(int target, vector<vector<int> > array) {
int row_len = array.size();
int column_len = array[0].size();//列的長度4
int row;
int column;
for (row = 0, column = column_len - 1;column >= 0 && row < row_len;)
{
if (target == array[row][column]) {
return true;
}
if (array[row][column] > target) {
column--;
continue;
}
if (array[row][column] < target) {
row++;
continue;
}
}
return false;
}
};
題目描述
請實現一個函數,將一個字符串中的每個空格替換成“%20”。例如,當字符串爲We Are Happy.則經過替換之後的字符串爲We%20Are%20Happy。
分析:對於這個題,我的思路是重新開闢一個數組,然後依次遍歷目標字符串中的每個元素,遇到空格,就把空格轉換成“%20”,然後重新複製回原數組即可。
class Solution {
public:
void replaceSpace(char *str, int length) {
int i = 0;
int j = 0;
char c[100];
while (str[i] != '\0')
{
if (str[i] != ' ')
c[j++] = str[i++];
else
{
c[j++] = '%';
c[j++] = '2';
c[j++] = '0';
i++;
}
}
i = 0;
while (i <j)
{
str[i] = c[i];
i++;
}
str[j] = '\0';
}
};
當然如果這個題目用java實現的話更加簡單,不過我沒有用java來做這個題,所以就分享給大家一片博客。
https://blog.csdn.net/mr_leehy/article/details/77149933
題目描述
輸入一個鏈表,按鏈表值從尾到頭的順序返回一個ArrayList。
分析:這道題我藉助了棧,應爲棧是先進後出,剛好符合我們的要求,之間遍歷鏈表,把每個元素入棧,最後從棧中拋出即可。
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) :
* val(x), next(NULL) {
* }
* };
*/
class Solution {
public:
vector<int> printListFromTailToHead(ListNode* head) {
vector<int>array;
stack<int>s;
while(head!=nullptr)
{
s.push(head->val);
head=head->next;
}
int n=s.size();
while(!s.empty())
{
array.push_back(s.top());
s.pop();
}
return array;
}
};
題目描述
用兩個棧來實現一個隊列,完成隊列的Push和Pop操作。 隊列中的元素爲int類型。
分析:由於棧是先進後出,而隊列是先進先出,所以爲了用隊列來實現棧的功能,在插入隊列元素時,我們直接把元素壓棧即可。對於出棧,我們先把存元素的棧中的元素依次拋出壓入另一個棧,然後拋出棧頂元素,重新把元素壓入原來的棧即可。
class Solution
{
public:
void push(int node) {
stack1.push(node);
}
int pop() {
int num=0;
while(!stack1.empty())
{
num=stack1.top();
stack1.pop();
stack2.push(num);
}
int number=stack2.top();
stack2.pop();
while(!stack2.empty())
{
stack1.push(stack2.top());
stack2.pop();
}
return number;
}
private:
stack<int> stack1;
stack<int> stack2;
};
題目描述
把一個數組最開始的若干個元素搬到數組的末尾,我們稱之爲數組的旋轉。 輸入一個非減排序的數組的一個旋轉,輸出旋轉數組的最小元素。 例如數組{3,4,5,1,2}爲{1,2,3,4,5}的一個旋轉,該數組的最小值爲1。 NOTE:給出的所有元素都大於0,若數組大小爲0,請返回0。
分析:這道題敘述的感覺很複雜,其實出題點就是如果數組大小爲0,就返回0,否則就返回數組中的最小元素即可。
class Solution {
public:
int minNumberInRotateArray(vector<int> rotateArray) {
int len=rotateArray.size();
if(len==0)
return 0;
int min=rotateArray[0];
for(int i=1;i<len;i++)
{
if(rotateArray[i]<min)
min=rotateArray[i];
}
return min;
}
};
題目描述
大家都知道斐波那契數列,現在要求輸入一個整數n,請你輸出斐波那契數列的第n項(從0開始,第0項爲0)。
n<=39
class Solution {
public:
int Fibonacci(int n) {
int Fc=0;
if(n>39)
return 0;
else if(n==2||n==1)
return 1;
else if(n==0)
return 0;
else
{
int Fa=1,Fb=1;
for(int i=3;i<=n;i++)
{
Fc=Fa+Fb;
Fa=Fb;
Fb=Fc;
}
}
return Fc;
}
};
對於有的算法,我的可能算法複雜度很高,如果哪位朋友有好的想法,歡迎指出啊!謝謝。