面试题21. 调整数组顺序使奇数位于偶数前面(简单)
面试题21. 调整数组顺序使奇数位于偶数前面(简单)输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。
示例:输入:nums = [1,2,3,4]输出:[1,3,2,4]注:[3,1,2,4] 也是正确的答案之一。
提示:
1 <= nums.length <= 500001 <= nums[i] <= 10000
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/diao-zheng-shu-zu-shun-xu-shi-qi-shu-wei-yu-ou-shu-qian-mian-lcof
思路:二分思想
思路2还有其他思路,暂时未写
代码:1234567891011121314151617181920class Solution { public int[] exchange(int[] nums) { //二分,分治思想 int left = 0,right=nums.lengt ...
面试题18. 删除链表的节点(简单)
面试题18. 删除链表的节点(简单)给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。
返回删除后的链表的头节点。
注意:此题对比原题有改动
示例 1:输入: head = [4,5,1,9], val = 5输出: [4,1,9]解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.
示例 2:输入: head = [4,5,1,9], val = 1输出: [4,5,9]解释: 给定你链表中值为 1 的第三个节点,那么在调用了你的函数之后,该链表应变为 4 -> 5 -> 9.
说明:题目保证链表中节点的值互不相同若使用 C 或 C++ 语言,你不需要 free 或 delete 被删除的节点
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/shan-chu-lian-biao-de-jie-dian-lcof
思路:常规思路即可,如果是根节点,就返回根节点next即可,如果不是就一直循环找,双指针移动,找到val节点绕过去即可。 ...
面试题17. 打印从1到最大的n位数(一般)
面试题17. 打印从1到最大的n位数(一般)输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。
示例 1:输入: n = 1输出: [1,2,3,4,5,6,7,8,9]
说明:用返回一个整数列表来代替打印n 为正整数
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/da-yin-cong-1dao-zui-da-de-nwei-shu-lcof
思路1:常规思路,找到最大的数,按序用数组保存输出即可,但这里没有考虑到大数情况
思路2:大数 情况,需要将long型转成char输出,这里需要考虑,未写
代码1:12345678910class Solution { public int[] printNumbers(int n) { //是否需要考虑大数问题 int max = (int)Math.pow(10,n); int[] ans = new int[max-1]; ...
343. 整数拆分/面试题14- I. 剪绳子/面试题14- II. 剪绳子 II(一般)
343. 整数拆分/面试题14- I. 剪绳子/面试题14- II. 剪绳子 II(一般)给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。
说明:剪绳子2,要考虑大数情况
答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。
示例 1:输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1。
示例 2:输入: 10输出: 36解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。说明: 你可以假设 n 不小于 2 且不大于 58。
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/integer-break
思路1:带记忆化的递推(未写)
思路2:动态规划思路,也就是思路1的逆过程,将记忆化的从上到下,变为从下到上
建立一维动态数组 dp:
边界条件:dp[1] = dp[2] = 1,表示长度为 2 的绳子最大乘积为 1;状态转移方程:dp[i] = max(dp[i], max((i - ...
面试题13. 机器人的运动范围(较难)
面试题13. 机器人的运动范围(较难)地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+8=19。请问该机器人能够到达多少个格子?
示例 1:输入:m = 2, n = 3, k = 1输出:3
示例 2:输入:m = 3, n = 1, k = 0输出:1
提示:1 <= n,m <= 1000 <= k <= 20
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/ji-qi-ren-de-yun-dong-fan-wei-lcof
思路:这个思路没法写,因为真的有盲点,直接看链接的思路最好
https://leetcode-cn.com/problems/ji-qi-ren-de-yun- ...
509. 斐波那契数/面试题10- I. 斐波那契数列(简单)
509. 斐波那契数/面试题10- I. 斐波那契数列(简单)斐波那契数,通常用 F(n) 表示,形成的序列称为斐波那契数列。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:
F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.给定 N,计算 F(N)。
示例 1:输入:2输出:1解释:F(2) = F(1) + F(0) = 1 + 0 = 1.
示例 2:输入:3输出:2解释:F(3) = F(2) + F(1) = 1 + 1 = 2.
示例 3:输入:4输出:3解释:F(4) = F(3) + F(2) = 2 + 1 = 3.
提示:
0 ≤ N ≤ 30
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/fibonacci-number
思路:递归代码最好写,但性能最差,很多数重复计算,使用dp思想,正着写,从下往上写
回看记录200622添加了剑指offer的代码,注意大数处理,本题为简单题,后面可以不看了
代码123456 ...
面试题09. 用两个栈实现队列(简单)
面试题09. 用两个栈实现队列(简单)用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )
示例 1:输入:
["CQueue","appendTail","deleteHead","deleteHead"][[],[3],[],[]]输出:[null,null,3,-1]
示例 2:输入:["CQueue","deleteHead","appendTail","appendTail","deleteHead","deleteHead"][[],[],[5],[2],[],[]]输出:[null,-1,null,null,5,2]提示:
1 <= values <= 10000最多会对 appendTail、d ...
面试题06. 从尾到头打印链表(简单)
面试题06. 从尾到头打印链表(简单)输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)
示例 1:输入:head = [1,3,2]输出:[2,3,1]
限制:
0 <= 链表长度 <= 10000
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/cong-wei-dao-tou-da-yin-lian-biao-lcof
思路1:要是本题使用链表返回,那就和leetcode206一样了,第一时间想到得应该就得是栈来实现
思路2:尾插法改头插法,这里可以使用三指针,由于是数组输出,使用头插法不方便
回看记录200619用栈特别简单,没什么说的
代码1:1234567891011121314151617181920212223242526/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) ...
面试题05.替换空格(简单)
面试题05.替换空格(简单)请实现一个函数,把字符串 s 中的每个空格替换成”%20”。
示例 1:输入:s = "We are happy."输出:"We%20are%20happy."
限制:
0 <= s 的长度 <= 10000
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/ti-huan-kong-ge-lcof
思路:
直接用String内置的replaceAll即可,一句话返回
使用StringBuilder创建可变字符串
使用字符数组,每次遇到一个字符就直接放入数组,遇到空格就放%,下标++,再放2,再++,再放0即可
回看记录200604代码1和代码3可以看看,都简单,代码3中从char数组转成string要注意,以前没转过,不太会。
代码1:123456789101112class Solution { public String replaceSpace(String s) { StringBuilder new ...
240. 搜索二维矩阵 II/面试题04. 二维数组中的查找(简单)
240. 搜索二维矩阵 II/面试题04. 二维数组中的查找(简单)编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性:
每行的元素从左到右升序排列。每列的元素从上到下升序排列。
示例:现有矩阵 matrix 如下:
1234567[ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17, 24], [18, 21, 23, 26, 30]]
给定 target = 5,返回 true。
给定 target = 20,返回 false。
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/search-a-2d-matrix-ii
思路1:暴力法,全部遍历,遇到就找到了
思路2:我们从矩阵的右上角开始遍历,如果该数字就等于要查找的数,则查找过程结束;如果该数字大于要查找的数字,则剔除这个数字所在的列;如果该数字小于要查找的数字,则剔除这个数字所在的行,也就 ...