
算法
chenshida_
这个作者很懒,什么都没留下…
展开
-
剑指 Offer 58 - II. 左旋转字符串
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。 示例 1: 输入: s = “abcdefg”, k = 2 输出: “cdefgab” 示例 2: 输入: s = “lrloseumgh”, k = 6 输出: “umghlrlose” class Solution { public: string reverseLeftWords(strin原创 2021-08-16 10:46:08 · 115 阅读 · 0 评论 -
剑指Offer05. 替换空格
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。 示例 1: 输入:s = “We are happy.” 输出:“We%20are%20happy.” class Solution { public: string replaceSpace(string s) { int count=0; int len=s.size(); string ans; //计算空格个数 for(int i=0;i<le原创 2021-08-16 10:32:06 · 76 阅读 · 0 评论 -
剑指 Offer 11. 旋转数组的最小数字
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。 示例 1: 输入:[3,4,5,1,2] 输出:1 示例 2: 输入:[2,2,2,0,1] 输出:0 1.暴力解 class Solution { public: int minArray(vector<int>& numbers) { int原创 2021-08-01 00:06:44 · 95 阅读 · 0 评论 -
剑指Offer10- II. 青蛙跳台阶问题
一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。 答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。 示例 1: 输入:n = 2 输出:2 示例 2: 输入:n = 7 输出:21 示例 3: 输入:n = 0 输出:1 class Solution { public: int numWays(int n) { int a=1; int b=2; i原创 2021-07-31 23:40:38 · 109 阅读 · 0 评论 -
剑指Offer04. 二维数组中的查找
在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 相当于二叉搜索树,左孩子比根节点小,有孩子比根节点大 class Solution { public: bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) { if (matrix.s原创 2021-07-23 13:24:16 · 88 阅读 · 0 评论 -
剑指 Offer 10- I. 斐波那契数列
写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下: F(0) = 0, F(1) = 1 F(N) = F(N - 1) + F(N - 2), 其中 N > 1. 斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。 答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。 常规递归,会有栈溢出的风险 if(n==0) { return 0; }原创 2021-07-21 09:41:46 · 84 阅读 · 0 评论 -
剑指Offer03.数组中重复的数字
找出数组中重复的数字。 在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 示例 1: 输入: [2, 3, 1, 0, 2, 5, 3] 输出:2 或 3 class Solution { public: int findRepeatNumber(vector<int>& nums) { int temp[10原创 2021-07-20 00:43:40 · 72 阅读 · 0 评论 -
剑指Offer09. 用两个栈实现队列
class CQueue { public: stack<int> stack1,stack2; CQueue() {//初始化栈 while(!stack1.empty()) { stack1.pop(); } while(!stack2.empty()) { stack2.pop(); } } void ap原创 2021-07-20 00:04:59 · 70 阅读 · 0 评论 -
leetcode(167)两数之和 II - 输入有序数组
两数之和 II - 输入有序数组 给定一个已按照 升序排列 的整数数组 numbers ,请你从数组中找出两个数满足相加之和等于目标数 target 。 函数应该以长度为 2 的整数数组的形式返回这两个数的下标值。numbers 的下标 从 1 开始计数 ,所以答案数组应当满足 1 <= answer[0] < answer[1] <= numbers.length 。 你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。 示例 1: 输入:numbers = [2,.原创 2021-07-13 22:55:33 · 77 阅读 · 0 评论 -
leetcode(283)移动零
283. 移动零 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 示例: 输入: [0,1,0,3,12] 输出: [1,3,12,0,0] 说明: 必须在原数组上操作,不能拷贝额外的数组。 尽量减少操作次数。 方法一: 冒泡排序的改版,暴力解 class Solution { public: void moveZeroes(vector<int>& nums) { int i,j,temp; for原创 2021-07-11 23:59:19 · 90 阅读 · 0 评论 -
leetcode(189) 旋转数组
**给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。 进阶: 尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。 你可以使用空间复杂度为 O(1) 的 原地 算法解决这个问题吗? 示例 1: 输入: nums = [1,2,3,4,5,6,7], k = 3 输出: [5,6,7,1,2,3,4] 解释: 向右旋转 1 步: [7,1,2,3,4,5,6] 向右旋转 2 步: [6,7,1,2,3,4,5] 向右旋转 3 步: [5,6,7,1,2,3,4] 示例 2:原创 2021-07-11 23:33:19 · 78 阅读 · 0 评论 -
leetcode(977)有序数组的平方
给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。 示例 1: 输入:nums = [-4,-1,0,3,10] 输出:[0,1,9,16,100] 解释:平方后,数组变为 [16,1,0,9,100] 排序后,数组变为 [0,1,9,16,100] 示例 2: 输入:nums = [-7,-3,2,3,11] 输出:[4,9,9,49,121] 面对这样的题目,先把原来的数据平方后,有几种算来进行排序 1.直接插入排序: class Solu原创 2021-07-10 12:34:59 · 86 阅读 · 1 评论 -
leetcode(二)二分法查找算法
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。 示例 1: 输入: nums = [-1,0,3,5,9,12], target = 9 输出: 4 解释: 9 出现在 nums 中并且下标为 4 示例 2: 输入: nums = [-1,0,3,5,9,12], target = 2 输出: -1 解释: 2 不存在 nums 中因此返回 -1 class Solution { p原创 2021-07-09 07:49:30 · 126 阅读 · 0 评论 -
leetcode(一)刷题两数之和
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 示例 1: 输入:nums = [2,7,11,15], target = 9 输出:[0,1] 解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。 示例 2: 输入:nums = [3,2,4], target = 6 输出:[1,2] 示例 3: 输入:nums = [3,3], target = 6 输出:[0,1] 首先原创 2021-07-08 15:04:33 · 90 阅读 · 0 评论