Fork me on GitHub

Leetcode-738-单调递增的数字

Leetcode-738-单调递增的数字

题目描述

给定一个非负整数 N,找出小于或等于 N 的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增。

(当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增的。)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
示例 1:

输入: N = 10
输出: 9

示例 2:

输入: N = 1234
输出: 1234

示例 3:

输入: N = 332
输出: 299
说明: N 是在 [0, 10^9] 范围内的一个整数。
阅读更多...

Leetcode-746-使用最小花费爬楼梯

Leetcode-746-使用最小花费爬楼梯

题目描述

数组的每个索引作为一个阶梯,第 i个阶梯对应着一个非负数的体力花费值 cost[i](索引从0开始)。

每当你爬上一个阶梯你都要花费对应的体力花费值,然后你可以选择继续爬一个阶梯或者爬两个阶梯。

您需要找到达到楼层顶部的最低花费。在开始时,你可以选择从索引为 0 或 1 的元素作为初始阶梯。

1
2
3
4
5
6
7
8
9
10
11
示例 1:

输入: cost = [10, 15, 20]
输出: 15
解释: 最低花费是从cost[1]开始,然后走两步即可到阶梯顶,一共花费15。

 示例 2:

输入: cost = [1, 100, 1, 1, 1, 100, 1, 1, 100, 1]
输出: 6
解释: 最低花费方式是从cost[0]开始,逐个经过那些1,跳过cost[3],一共花费6。

注意:

  1. cost 的长度将会在 [2, 1000]
  2. 每一个 cost[i] 将会是一个Integer类型,范围为 [0, 999]
阅读更多...

Leetcode-739-每日温度

Leecode-739-每日温度

题目描述:

本质 : 找到数组中第一个大于该元素数字的索引 ,并返回索引差值

根据每日 气温 列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高超过该日的天数。如果之后都不会升高,请在该位置用 0 来代替。

例如,给定一个列表temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]

提示:气温 列表长度的范围是[1, 30000]。每个气温的值的均为华氏度,都是在[30, 100]范围内的整数。

阅读更多...

Leetcode-389-找不同

Leetcode-389- 找不同

题目描述

  • 给定两个字符串 st,它们只包含小写字母。

  • 字符串 t由字符串s随机重排,然后在随机位置添加一个字母。

  • 请找出在 t 中被添加的字母。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
示例 1:

输入:s = "abcd", t = "abcde"
输出:"e"
解释:'e' 是那个被添加的字母。

示例 2:

输入:s = "", t = "y"
输出:"y"

示例 3:

输入:s = "a", t = "aa"
输出:"a"

示例 4:

输入:s = "ae", t = "aea"
输出:"a"
阅读更多...

Leetcode-面试题09-用两个栈实现队列

Leetcode-剑指 Offer 09. 用两个栈实现队列

题目描述

  • 用两个栈实现一个队列。

  • 队列的声明如下,请实现它的两个函数appendTaildeleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )

示例

1
2
3
4
5
6
7
8
9
输入:
["CQueue","appendTail","deleteHead","deleteHead"]
[[],[3],[],[]]
输出:[null,null,3,-1]

输入:
["CQueue","deleteHead","appendTail","appendTail","deleteHead","deleteHead"]
[[],[],[5],[2],[],[]]
输出:[null,-1,null,null,5,2]
阅读更多...

Leetcode-190-颠倒的二进制位

Leetcode-190-颠倒二进制位

题目描述

颠倒给定的 32 位无符号整数的二进制位。

1
2
3
4
输入: 00000010100101000001111010011100
输出: 00111001011110000010100101000000
解释: 输入的二进制串 00000010100101000001111010011100 表示无符号整数 43261596,
因此返回 964176192,其二进制表示形式为 00111001011110000010100101000000。
1
2
3
4
5
6
示例 2:

输入:11111111111111111111111111111101
输出:10111111111111111111111111111111
解释:输入的二进制串 11111111111111111111111111111101 表示无符号整数 4294967293,
  因此返回 3221225471 其二进制表示形式为 10111111111111111111111111111111 。

思路:逐位颠倒

  • 在面试的时候逐位颠倒作为最直接的解决方案。

mark

  • 对于十进制而言(反转)
    • 十进制:ans = ans * 10 + n % 10; n = n / 10;
    • 二进制:ans = ans * 2 + n % 2; n = n / 2;

但是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/**
* 对于十进制而言
* ans = ans * 10 + n % 10 ; n = n /10;
* 对于二进制而言
* ans = ans * 2 + n % 2 ; n = n /2;
*/
public class Solution {
// you need treat n as an unsigned value
public int reverseBits(int n) {
int ans = 0;

// * 对于二进制而言
// * ans = ans * 2 + n % 2 ; n = n /2;
for (int i = 0; i < 32; i++) {
ans = (ans << 1) + (n & 1);
n >>= 1;
}

return ans;
}
}

mark

时间复杂度:O(logn) 这里32位所以是O(1)

空间复杂度: O(1)

  • © 2019-2022 Zhuuu
  • PV: UV:

请我喝杯咖啡吧~

支付宝
微信