1 chenmi123321

尚未进行身份认证

我要认证

暂无相关简介

等级
TA的排名 10w+

9. 回文数

代码完整版:#include<iostream>#include <cstring>#include <stdlib.h>using namespace std;int fun(string &s,int n){ int left=0; int right=-1; int h[256]={0}; int res=0; while(left<n) { if(h[s[right+1]]==0&&right+1&l

2020-09-15 10:43:12

剑指 Offer 58 - II. 左旋转字符串

题目:字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。题解思路:方法:求余法1.新建一个string srt="";然后利用求余法遍历字符串,在添加字符串到str中。函数代码:class Solution {public: string reverseLeftWords(string s, int n) { stri

2020-09-15 01:29:36

8. 字符串转换整数 (atoi)

函数代码:class Solution {public: int myAtoi(string str) { int flag=true; int i=0; while(str[i]==' ') { i++; } if(str[i]=='-') { flag=false; } if(str[i]=='-'||

2020-09-14 22:59:25

138. 复制带随机指针的链表

题目:给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。要求返回这个链表的 深拷贝。我们用一个由 n 个节点组成的链表来表示输入/输出中的链表。每个节点用一个 [val, random_index] 表示:val:一个表示 Node.val 的整数。random_index:随机指针指向的节点索引(范围从 0 到 n-1);如果不指向任何节点,则为 null 。方法一:哈希表unordered_mapclass Solution {public:

2020-09-09 21:52:04

23. 合并K个升序链表

题目:给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。方法一:归并+分治函数代码:class Solution {public: ListNode* mergeKLists(vector<ListNode*>& lists) { if(lists.size()==0) { return NULL; } return mergesor

2020-09-09 09:45:09

139. 单词拆分

题目:给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。方法一:动态规划函数代码:class Solution {public: bool wordBreak(string s, vector<string>& wordDict) { auto wordDictSet = unordered_se

2020-09-08 17:47:06

377. 组合总和 Ⅳ

题目:给定一个由正整数组成且不存在重复数字的数组,找出和为给定目标正整数的组合的个数。题解思路:方法一:一维动态规划函数代码:class Solution {public: int combinationSum4(vector<int>& nums, int target) { int n=nums.size(); vector<unsigned long long> dp(target+1,0); dp

2020-09-08 11:08:20

剑指 Offer 14- II. 剪绳子 II

题目:给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]…k[m - 1] 。请问 k[0]k[1]…*k[m - 1] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。方法一:迭代数学计算函数代码:class Solution {p

2020-09-08 01:40:35

1143. 最长公共子序列

题目:给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列的长度。一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。两个字符串的「公共子序列」是这两个字符串所共同拥有的子序列。若这两个字符串没有公共子序列,则返回 0。题解思路:方法一:动态规划函数代码:class Solutio

2020-09-08 01:40:22

516. 最长回文子序列

题目:给定一个字符串 s ,找到其中最长的回文子序列,并返回该序列的长度。可以假设 s 的最大长度为 1000 。题解思路:方法一:动态规划函数代码:class Solution {public: int longestPalindromeSubseq(string s) { int n=s.size(); vector<vector<int>>dp(n,vector<int>(n,0)); for(

2020-09-08 01:40:17

264. 丑数 II

题目:编写一个程序,找出第 n 个丑数。丑数就是质因数只包含 2, 3, 5 的正整数。题解思路:方法一:动态规划函数代码:class Solution {public: int nthUglyNumber(int n) { vector<int>dp(n,0); dp[0]=1; int a=0,b=0,c=0; for(int i=1;i<n;i++) { dp[i]=m

2020-09-08 01:40:12

剑指 Offer 43. 1~n整数中1出现的次数

题目:力扣233. 数字 1 的个数输入一个整数 n ,求1~n这n个整数的十进制表示中1出现的次数。例如,输入12,1~12这些整数中包含1 的数字有1、10、11和12,1一共出现了5次。方法一:暴力法+循环迭代函数代码:class Solution {public: int countDigitOne(int n) { int cnt=0; for(int i=0;i<=n;i++) { int t=i

2020-09-08 01:40:03

287. 寻找重复数

题目:给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。题解思路:方法一:双指针+快慢指针函数代码:class Solution {public: int findDuplicate(vector<int>& nums) { int slow=0; int fast=0; slow=nums[slow

2020-09-07 11:41:24

300. 最长上升子序列

题目:给定一个无序的整数数组,找到其中最长上升子序列的长度。题解思路:方法一:动态规划函数代码:class Solution {public: int lengthOfLIS(vector<int>& nums) { int n=nums.size(); vector<int>dp(n+1,1); int res=0; for(int i=0;i<n;i++) {

2020-09-07 04:34:57

剑指 Offer 42. 连续子数组的最大和

题目: 同力扣53 最大子序和输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。题解思路:方法一:动态规划注意res=dp[0]=nums[0];函数代码:class Solution {public: int maxSubArray(vector<int>& nums) { int n=nums.size(); vector<int> dp(n,0);

2020-09-07 04:06:31

518. 零钱兑换 II

题目:给定不同面额的硬币和一个总金额。写出函数来计算可以凑成总金额的硬币组合数。假设每一种面额的硬币有无限个。题解思路:方法一:二维dp+完全背包函数代码:class Solution {public: int change(int amount, vector<int>& coins) { int n=coins.size(); int sum=0; for(int i=0;i<n;i++) {

2020-09-07 03:43:23

494. 目标和

题目:给定一个非负整数数组,a1, a2, …, an, 和一个目标数,S。现在你有两个符号 + 和 -。对于数组中的任意一个整数,你都可以从 + 或 -中选择一个符号添加在前面。返回可以使最终数组和为目标数 S 的所有添加符号的方法数。题解思路:方法一:一维度dp+完全背包函数代码:class Solution {public: int findTargetSumWays(vector<int>& nums, int S) { int n=num

2020-09-07 03:17:07

416. 分割等和子集

题目:给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。注意:每个数组中的元素不会超过 100数组的大小不会超过 200题解思路:方法一:二维动态规划+0-1背包函数代码:class Solution {public: bool canPartition(vector<int>& nums) { int n=nums.size(); int sum=0; for(int

2020-09-07 02:31:07

145. 二叉树的后序遍历

题目:给定一个二叉树,返回它的 后序 遍历。题解思路:方法一:递归+dfs函数代码:class Solution {public: vector<int> postorderTraversal(TreeNode* root) { vector<int>res; dfs(root,res); return res; } void dfs(TreeNode *root,vector&l

2020-09-07 02:08:24

94. 二叉树的中序遍历

题目:给定一个二叉树,返回它的中序遍历。方法一:递归函数代码一:class Solution { vector<int>res;public: vector<int> inorderTraversal(TreeNode* root) { dfs(root,res); return res; } void dfs(TreeNode* root,vector<int>&res)

2020-09-07 02:03:22

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。