Leetcode-283-移动零
相当于是使用 for 进行交换的一个小技巧的练习,后面会给出一些算法的小技巧,都是总结的一些算法的小技巧。给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例
输入: [0,1,0,3,12]输出: [1,3,12,0,0]
说明必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。
1234567891011121314151617public class Test { public static void main(String[] args) { Integer[] arr = {1, 3, 5, 0, 7, 0, 0, 0, 8, 9}; int j = 0; for (int i = 0; i < arr.length; i++) { if (arr[i] != 0) { int temp = arr[j]; arr[j] = arr ...
Leetcode007-整数反转
整数反转给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
示例 1:
12输入:x = 123输出:321
示例 2:
12输入:x = -123输出:-321
示例 3:
12输入:x = 120输出:21
示例 4:
12输入:x = 0输出:0
提示:
-231 <= x <= 231 - 1
当所计算数字大于2^30 次方或等于2^31 次方但余下的数大于7或小于-2^30 次方或等于-2^31 次方但余下的数小于-8时,只要再计算一次就溢出。
解题方式1234567891011121314151617181920public static int reverse(int x) { int pop; int res = 0; while (x != 0) { pop = x % 10; ...
Leetcode232-栈stack-用栈实现队列
用栈实现队列这个是 Leetcode 232 题,用两个栈来实现一个先进先出的队列,实现了一个版本。
请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):
实现 MyQueue 类:
void push(int x) 将元素 x 推到队列的末尾
int pop() 从队列的开头移除并返回元素
int peek() 返回队列开头的元素
boolean empty() 如果队列为空,返回 true ;否则,返回 false
说明
你只能使用标准的栈操作 —— 也就是只有 push to top, peek/pop from top, size, 和 is empty 操作是合法的。
你所使用的语言也许不支持栈。你可以使用 list 或者 deque(双端队列)来模拟一个栈,只要是标准的栈操作即可。
进阶
你能否实现每个操作均摊时间复杂度为 O(1) 的队列?换句话说,执行 n 个操作的总时间复杂度为 O(n) ,即使其中一个操作可能花费较长时间。
示例:
12345678910111213输入:["MyQueue ...
Leetcode-344-字符串反转
LeetCode 的344 题。
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
提示:
1 <= s.length <= 105
s[i] 都是 ASCII 码表中的可打印字符
示例1:
12输入:["h","e","l","l","o"]输出:["o","l","l","e","h"]
示例2:
12输入:["H","a","n","n","a","h"]输出:["h","a","n","n","a","H& ...