剑指offer/LeetCode
文章平均质量分 57
文丑颜不良啊
平平无奇的Java开发小白
展开
-
数组循环右移
数组循环右移问题:给定一个长度为n的数组,将其向右循环移动k位得到一个新的数组。要求空间复杂度为O(1)。(此题为LeetCode上的编程题,但是在我遇到多益网络的面试之前我是不知道此题是LeetCode上的,所以当时我并不清楚此题的算法) 例:长度为n=5的数组a的元素为{1,2,3,4,5},将其右移k=3位后得到{3,4,5,1,2}。其移动过程为{1,2,...原创 2019-09-03 19:07:39 · 2014 阅读 · 0 评论 -
替换空格
替换空格 题目描述:用函数实现一个功能,把字符串中的每个空格替换成“%20”。例如,输入“We are happy.”,则输出“We%20are%20happy.”。 我们经常会遇到这种把空格替换为%20或者把#替换为%23的题,那么为什么要把空格替换为%20呢,不能替换为%21吗?这是因为空格的ASCII码是32,即十六进制的0x20,因此空格更多的情况下...原创 2019-07-29 17:06:34 · 160 阅读 · 0 评论 -
递归求斐波那契数列
斐波那契数列 题目描述:编写一个函数,求斐波那契数列的第n项的值。 首先,对于斐波那契数列,我们是非常熟悉了,对斐波那契定义为如下:f(0)=0,f(1)=0,f(2)=1,……f(n)=f(n-1)+f(n-2),其中n>1。对于这种求斐波那契数列第n项的问题,我们大多采用递归来解决。那什么是递归呢?递归即是在一个函数的内部调用这个函数自身的一种方法...原创 2019-07-30 21:27:21 · 20206 阅读 · 0 评论 -
位运算与二进制数中1的个数
位运算 位运算就是把数字用二进制表示之后,对每一位上的0或1的操作。常用的位运算有5种,分别是与、或、异或、左移和右移。其运算规律如下所示: 与(&) 0 & 0 = 0 0 & 1 = 0 1 & 0 = 0 1 & 1 = 1 ...原创 2019-08-05 23:31:27 · 946 阅读 · 0 评论 -
旋转数组的最小数字
把一个有序递增数组的最开始的若干个元素 搬到数组的末尾,形成的新数组,我们称之为旋转数组。求旋转数组的最小数字,即输入一个递增排序数组的一个旋转数组,输出旋转数组中的最小数字。例如,输入数组{3,4,5,1,2},输出1。{3,4,5,1,2}为{1,2,3,4,5}的旋转数组。 思路:最简单的做法就是不管旋转数组的特性,直接遍历一遍数组,找出其中最小的数字即...原创 2019-08-06 11:13:16 · 81 阅读 · 0 评论 -
数值的整数次方
即编写函数实现pow()函数的功能,求数值base的exponent次方。 在不考虑指数为非正值的情况下,代码很简单:#include <stdio.h>double Power(double base, int exponent){ double result = 1.0; for (int i = 1; i <=...原创 2019-08-06 18:37:01 · 216 阅读 · 0 评论 -
链表中倒数第K个结点
题目描述: 输入一个链表,输出该链表中倒数第k个结点。假设此链表中有6个结点,各结点的值分别是1、2、3、4、5、6。我们想要获取倒数第3个结点,即值为4。思路:最易想到的解法是先走到链表的尾端,再从尾端回溯k步,即得到倒数第k个结点。但是单向链表的结点只有从前往后的指针,没有从后往前的指针。但是,如果我们从前往后遍历链表直到尾端呢?假设整个链表有n个结点,那么倒数第k个结点就是从头结点开始的...原创 2019-10-08 14:53:43 · 305 阅读 · 0 评论 -
反转链表
题目描述:输入一个链表,反转链表并输出。思路:通常处理方法是将当前结点的next域指向其前一结点。由于需要将当前结点的next域修改为前一结点,所以我们需要用一个指针PrevNode来记录前一结点。同时,因为修改了当前结点到的next结点后,便无法访问原来的next结点,因此需要一个NextNode指针来记录修改前的原来的next结点。代码如下:#include <iost...原创 2019-10-08 15:37:07 · 137 阅读 · 0 评论