文档章节

牛客网刷题

 大不了敲一辈子代码
发布于 2018/07/18 00:00
字数 1199
阅读 231
收藏 0

1. 二维数组中的查找(难度:易)

题目描述

在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

思路

最外层保证不出数组边界,从左上角开始,依次向深层递归

解法

public class Solution {
    public boolean Find(int target, int [][] array) {
        int i=0;
        int j=0;
        return func(i,j,array,target);  //从array[0][0]开始递归
    }
    public boolean func(int i,int j,int [][] array, int target){
        int row = array.length;
        int col = array[0].length;
        if(i >= row || j >= col){  //保证没有出界
            return false;
        }
        if(array[i][j] < target){  //向下和向右递归
            return func(i+1,j,array,target)||func(i,j+1,array,target);
        }else if(array[i][j]==target){
            return true;
        }else{
            return false;
        }
    }
}

2. 替换空格(难度:易)

题目描述

请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

思路

感觉没啥思路的

解法

public class Solution {
    public String replaceSpace(StringBuffer str) {
    	while(str.indexOf(" ")!=-1) {
    		str.replace(str.indexOf(" "), str.indexOf(" ")+1, "%20");
    	}
    	return str.toString();
    }
}

3. 从头到尾打印链表(难度:易)

题目描述

输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。题目给定了链表节点的类定义:

/**
*    public class ListNode {
*        int val;
*        ListNode next = null;
*
*        ListNode(int val) {
*            this.val = val;
*        }
*    }
*
*/

思路

关键在于一个反转链表,一个起始指针,一个终止指针,二者互换值,并不断靠近,当起始指针在终止指针右边或相遇时结束

解法

/**
*    public class ListNode {
*        int val;
*        ListNode next = null;
*
*        ListNode(int val) {
*            this.val = val;
*        }
*    }
*
*/
import java.util.ArrayList;
public class Solution {
    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
        ArrayList<Integer> arr = new ArrayList<>();
        if(listNode==null) {
        	return arr;
        }
        arr.add(listNode.val);
        while(listNode.next!=null) {
        	listNode = listNode.next;
        	arr.add(listNode.val);
        }
        int i = 0;
        int j = arr.size()-1;
        for(;i<=j;i++,j--) {
        	int temp = arr.get(i);
        	arr.set(i, arr.get(j));
        	arr.set(j, temp);
        }
        return arr;
    }
}

4. 旋转数组的最小数字(难度:易)

题目描述

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。

思路

第一个注意的是,数组为空的时候,返回0;

第二个注意的是旋转数组只搬一次;

第三个注意的是,若干个元素包含0个元素的情况。

解法

import java.util.ArrayList;
public class Solution {
    public int minNumberInRotateArray(int [] array) {
        if(array.length == 0){
            return 0;
        }else{
            for(int i=0;i<array.length-1;i++){
                if(array[i+1]<array[i]){
                    return array[i+1];
                }
            }
            return array[0];
        }
    }
}

5. 斐波拉契数列(难度:易)

题目描述

大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。

n<=39

思路

感觉没什么好说的

解法

public class Solution {
    public int Fibonacci(int n) {
        if(n==0){
            return 0;
        }
        if(n==1||n==2){
            return 1;
        }
        int a = 1;
        int b = 1;
        int temp;
        for(int i=3;i<=n;i++){
            b = a+b;
            temp = a;
            a = b;
            b = temp;
        }
        return a;
    }
}

6. 跳台阶(难度:易)

题目描述

一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。

思路和解法

参考第5题

7. 变态跳台阶(难度:易)

题目描述

一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

思路

计算过后发现就是2的target-1次方

解法

public class Solution {
    public int JumpFloorII(int target) {
        return (int)Math.pow(2,target-1);
    }
}

8. 链表中倒数第k个节点

题目描述

输入一个链表,输出该链表中倒数第k个结点。

思路

侮辱智商的题目

解法

/*
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/
public class Solution {
    public ListNode FindKthToTail(ListNode head,int k) {
        int count=0;
        ListNode p = head;
        while(p!=null){
            count+=1;
            p=p.next;
        }
        if(k>count){
            return null;
        }
        p = head;
        for(int i=1;i<=count-k;i++){
            p = p.next;
        }
        return p;
    }
}

 

© 著作权归作者所有

共有 人打赏支持
下一篇: Numpy入门
粉丝 0
博文 14
码字总数 8396
作品 0
武汉
私信 提问
算法岗:计算机视觉方向求职经验总结

进入11月份,楼主找工作也基本进入尾声了,从7月份开始关注牛客网,在求职的过程中学到了不少,感谢牛客提供这样一个平台,让自己的求职历程不再孤单。 先说一下楼主教育背景,本科西部末流9...

牛客网
2018/01/04
0
0
程序员该如何学习数据结构与算法?

作者 | 帅地 责编 | 郭芮 数据结构与算法的重要性对程序员来说不言而喻,本文就来分享下我是如何学习数据结构与算法的,希望对你们有所帮助。 学习算法的捷径就是多刷题 要说捷径,我觉得就是...

CSDN资讯
2018/10/13
0
0
华为2018届校园招聘笔试题目以及相应代码分享 软件开发岗位

华为2018届校园招聘笔试 时间20170712 笔试题目 01 括号匹配 //01 括号匹配 define CRTSECURENOWARNINGS /*括号匹配 给定一个字符串,里边可能包含“()”、“[]”、“{}”三种括号,请编写程...

lizi_stdio
2017/08/03
0
0
chinapub读书会第8期: 程序员面试揭秘 ——看IT名企如何招聘程序员

主办方: 时 间:2016-5月7日(周六) 13:30-16:20 地 点: 西三环六里桥北里·法律出版社2层(地图搜索“法律出版社”,公交站:六里桥北里) 出席嘉宾: 左程云 毕业于华中科技大学(本科)...

chinapub
2016/04/26
88
0
2018年5月23日滴滴新锐实习电话面试,开发岗位

1 自我介绍 2 java框架中spring框架的好处特点,ioc原理 3 项目介绍和sql优化做了什么,索引几种,数据结构,b+的特点,聚集索引的特点 4 进程间的通信方式 5 访问一个网页,详细的描述服务器...

牛客网
2018/05/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周一乱弹 —— 白掌柜说了卖货不卖身

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @爱漫爱 :这是一场修行分享羽肿的单曲《Moony》 手机党少年们想听歌,请使劲儿戳(这里) @clouddyy :开不开心? 开心呀, 我又不爱睡懒觉…...

小小编辑
今天
7
0
大数据教程(11.7)hadoop2.9.1平台上仓库工具hive1.2.2搭建

上一篇文章介绍了hive2.3.4的搭建,然而这个版本已经不能稳定的支持mapreduce程序。本篇博主将分享hive1.2.2工具搭建全过程。先说明:本节就直接在上一节的hadoop环境中搭建了! 一、下载apa...

em_aaron
今天
2
0
开始看《JSP&Servlet学习笔记》

1:WEB应用简介。其中1.2.1对Web容器的工作流程写得不错 2:编写Servlet。搞清楚了Java的Web目录结构,以及Web.xml的一些配置作用。特别是讲了@WebServlet标签 3:请求与响应。更细致的讲了从...

max佩恩
今天
4
0
mysql分区功能详细介绍,以及实例

一,什么是数据库分区 前段时间写过一篇关于mysql分表的的文章,下面来说一下什么是数据库分区,以mysql为例。mysql数据库中的数据是以文件的形势存在磁盘上的,默认放在/mysql/data下面(可...

吴伟祥
今天
3
0
SQL语句查询

1.1 排序 通过order by语句,可以将查询出的结果进行排序。放置在select语句的最后。 格式: SELECT * FROM 表名 ORDER BY 排序字段ASC|DESC; ASC 升序 (默认) DESC 降序 1.查询所有商品信息,...

stars永恒
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部