博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
软件工程10道题
阅读量:5149 次
发布时间:2019-06-13

本文共 6596 字,大约阅读时间需要 21 分钟。

1.爬楼梯:斐波那契数列的算法

class Solution {public:    /**     * @param n: An integer     * @return: An integer     */    int climbStairs(int n) {        // write your code here         int fib1=1;         int fib2=2;         if(n==0)         {             return 1;         }         if(n==1)         {         return 1;         }          if(n==2)          {        return 2;          }         if(n>1)         {         for(int i=2;i

1121303-20170815152507896-1446760200.png

2.排列序号:对原数组中的每一个位置,找到其后有多少个数比它小,由于字典排序是从小到大排列的,所以只需计算出第i位(从1开始)在它后面比它小的数进行(A.size()-k-1)!,最后相加即可。

class Solution {public:    /**     * @param A an integer array     * @return a long integer    */    long long permutationIndex(vector
& A) { // Write your code here int i,j; long n=1; for(i=0;i
A[j]) { long m=1; for(int k=i;A.size()-k-1>0;k++) { m=m*(A.size()-k-1); } n=n+m; } } } return n; }};

1121303-20170815100753584-1973617431.png

3.合并排序数组:先将两个数组合并,然后将B数组里的元素与A里面的比较,然后将B的元素插入进去。

class Solution {public:    /**     * @param A and B: sorted integer array A and B.     * @return: A new sorted integer array     */    vector
mergeSortedArray(vector
&A, vector
&B) { // write your code here vector
C(A.size()+B.size(), 0); int i,j; for(i=0;i
j) { C[m]=C[m-1]; m--; } C[j]=k; p++; } } } return C; }};

1121303-20170815101125865-2095890648.png

4.翻转链表:翻转链表最简单的方式是改变链的链接顺序,把后一个节点的next变成前一节地址。

/** * Definition of ListNode *  * class ListNode { * public: *     int val; *     ListNode *next; *  *     ListNode(int val) { *         this->val = val; *         this->next = NULL; *     } * } */class Solution {public:    /**     * @param head: The first node of linked list.     * @return: The new head of reversed linked list.     */    ListNode *reverse(ListNode *head) {        // write your code here                ListNode *prev=NULL;        while(head!=NULL)        {            ListNode *t=head->next;            head->next=prev;            prev=head;            head=t;        }        return prev;    }};

1121303-20170815113744021-1822008811.png

5.乘积最大子序列:用Min表示以nums[i]结尾乘积最小的连续子序列 因为有负数,所以保存这个是必须的

class Solution {public:    /**     * @param nums: a vector of integers     * @return: an integer     */    int maxProduct(vector
& nums) { // write your code here int Max = nums[0]; int Min = nums[0]; int allMax = nums[0]; for(int i=1;i

//自己写的第一种但复杂度过高

/*int i,j,k,m;        k=nums[0];        for(i=0;i

1121303-20170815102004725-901593953.png

6.解码方法:斐波那契数列,我们用两个变量fib2, fib1来分别表示s[i-1]和s[i-2]的解码方法,然后我们从i=1开始遍历,也就是字符串的第二个字符,我们判断如果当前字符为'0',说明当前字符不能单独拆分出来,只能和前一个字符一起,fib2=fib1,然后我们看前面的字符,如果前面的字符是1或者2时,我们就可以更新,fib2=fib2+fib1,其实fib1赋值为之前的fib2,如果不满足这些条件的话,那么fib1=fib2。

class Solution {public:    /**     * @param s a string,  encoded message     * @return an integer, the number of ways decoding     */    int numDecodings(string& s) {        // Write your code here        int fib1=1,fib2=1;         if (s.empty()||s.front()=='0')          {         return 0;         }         for(int i=1;i

1121303-20170816211428568-351511879.png

7.两个链表的交叉:利用栈。

/** * Definition for singly-linked list. * struct ListNode { *     int val; *     ListNode *next; *     ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public:    /**     * @param headA: the first list     * @param headB: the second list     * @return: a ListNode     */    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {        // write your code here        stack
A,B; ListNode *x=NULL; if(headA==NULL||headB==NULL) { return NULL; } else { for(;headA!=NULL;headA=headA->next) { A.push(headA); } for(;headB!=NULL;headB=headB->next) { B.push(headB); } for(;A.top()!=NULL&&B.top()!=NULL;) { if(A.top()==B.top()) { x=A.top(); A.pop(); B.pop(); } else { break; } } return x; } }};

1121303-20170817074549193-924476383.png

8.N皇后问题:

class Solution {public:    /**     * Get all distinct N-Queen solutions     * @param n: The number of queens     * @return: All distinct solutions     * For example, A string '...Q' shows a queen on forth position     */    vector
> solveNQueens(int n) { // write your code here vector
> ret; search(0,n,ret); return ret; } int c[20]; void search(int r,int &n, vector
> &ret) { if(r == n) { vector
v; for(int i=0; i

1121303-20170817150750896-1977911314.png

9.全排列:可以理解为每个数在开头时后面所有数的全排列,以此类推进行递归。

class Solution {public:    /**     * @param nums: A list of integers.     * @return: A list of permutations.     */    vector
> permute(vector
nums) { // write your code here vector
> result; int size = nums.size(); permute(nums, 0, size, result); return result; } void permute(vector
&nums, int begin, int end, vector
> &result) { if(begin == end) { result.push_back(nums); } else { for(int i=begin; i

1121303-20170817160744318-1489858297.png

10.翻转字符串:定义两个整形变量,如果s[i]不为空其中一个减一,另一个不变,变量之差即为单词长度。

class Solution {public:    /**     * @param s : A string     * @return : A string     */    string reverseWords(string s) {        // write your code here         string word, line;       int size=s.size();       int i=size-1, j, wordbegin=size-1, wordend=size-1;        if(s.empty())        {            return s;        }         for(;i>=0;)           {             for(;s[i]==' '&&i>=0;i--)              {                 wordbegin--;                 wordend--;             }             for(;s[i]!=' '&&i>=0;i--)               {                 wordbegin--;             }             word.resize(0);             for(j=wordbegin+1; j<=wordend; j++)             {                 word.append(1,s[j]);             }            if(wordbegin==0)            {                 line=line+word;            }             else             {                 line=line+word+" ";             }             wordend =wordbegin;         }         return line;    }        };

1121303-20170817194835131-2134142671.png

转载于:https://www.cnblogs.com/qhdxzwp/p/7363538.html

你可能感兴趣的文章
java求最高分 最低分_用java编程实现求八个学生某门课的最高分最低分和平均分...
查看>>
mysql引用其他表主键_mysql – 如何使用JPA引用的表的主键更新一个表中的外键?...
查看>>
java中vector容器_C++ vector 容器浅析
查看>>
java行距getprinter_java 打印 类似打印存折的打印
查看>>
java php公用加密_php 和 java共用的加密方法
查看>>
java 链表指针_链表中的指针
查看>>
java培训没学好想放弃_我这么努力,为什么没学好java【java培训班分享】
查看>>
php 文档阅读,PHP实现简单在线阅读PDF文件
查看>>
php 面向对象 特性,什么是php面向对象及面向对象的三大特性
查看>>
php 错误 异常,一个显示效果非常不错的PHP错误、异常处理类
查看>>
php无法打开txt文件类型,电脑文本文档不显示txt怎么办
查看>>
vue请求php验证,PHP开发API接口签名及验证
查看>>
php查询mysql数据库生成xml,如何连接MYSQL数据库生成XML文档(2)
查看>>
php判断是不是一个数组中,php如何判断一个值是否在数组中
查看>>
apache下html无法连接到php,Ubuntu服务器下apache2无法解析html中的php代码的问题
查看>>
php内核探索,php内核探索 [转]
查看>>
blink php,Blink 中文教程
查看>>
ai分析java异常,最常见的10种Java异常问题!
查看>>
php 验证码 库,php通过GD库实现验证码功能
查看>>
Gmail规则正则表达java,常用正则表达式
查看>>