基础循环遍历,这个编译器有点问题,非要在下面也写一个return..
- class Solution {
- public:
- vector<int> twoSum(vector<int>& nums, int target) {
- vector<int> v;
- for(int i=1;i
size();i++) - {
- for(int j=0;j
- {
- if(nums[i]+nums[j]==target)
- {
- v.push_back(i);
- v.push_back(j);
- return v;
- }
- }
- }
- return v;
- }
- };
2. 两数相加
题目地址:力扣2
思路:
就是模拟加减运算,注意进位就好。
以及每一个新的结点都要new一下。
代码:
- /**
- * Definition for singly-linked list.
- * struct ListNode {
- * int val;
- * ListNode *next;
- * ListNode() : val(0), next(nullptr) {}
- * ListNode(int x) : val(x), next(nullptr) {}
- * ListNode(int x, ListNode *next) : val(x), next(next) {}
- * };
- */
- class Solution {
- public:
- ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
- ListNode* l3;
- ListNode* t=new ListNode(0);
- l3=t;
- while(l1&&l2)
- {
- t->val=t->val+l1->val+l2->val;
- ListNode* p;
- if(t->val>=10)p=new ListNode(t->val/10);
- else p=new ListNode(0);
- t->val=t->val%10;
- l1=l1->next;
- l2=l2->next;
- if(l1||l2){
- t->next=p;
- t=t->next;
- }
- }
- ListNode* p;
- while(l1)
- {
- t->val=t->val+l1->val;
- if(t->val>=10)p=new ListNode(t->val/10);
- else p=new ListNode(0);
- t->val=t->val%10;
- if(l1->next){
- t->next=p;
- t=t->next;
- }
- l1=l1->next;
- }
- while(l2)
- {
- t->val=t->val+l2->val;
- if(t->val>=10)p=new ListNode(t->val/10);
- else p=new ListNode(0);
- t->val=t->val%10;
- if(l2->next){
- t->next=p;
- t=t->next;
- }
- l2=l2->next;
- }
- if(p->val!=0){
- t->next=p;
- }
- return l3;
- }
- };
3. 无重复字符的最长子串
题目地址:力扣3
思路:
改了好久。。小细节一直错。
三层循环来做这题。
以pwwkew为例,我们肉眼去看的思路是
p
pw
w
w
wk
wke
k
ke
kew
所以用代码模拟就好啦
代码:
- class Solution {
- public:
- int lengthOfLongestSubstring(string s) {
- if(s=="")return 0;
- if(s.length()==1)return 1;
- int t=1;
- int sum=1;
- int g=0;
- for(int i=0;i
length();i++) - {
- t=1;
- for(int j=i+1;j
length();j++) - {
- for(int k=i;k
- {
- if(s[j]==s[k]){
- sum=max(sum,t);
- g=1;
- break;
- }
- }
- if(g==1){
- g=0;
- break;
- }
- t++;
- sum=max(sum,t);
- }
- }
- //sum=max(sum,t);
- return sum;
- }
- };
4. 寻找两个正序数组的中位数
题目地址:力扣4
思路:
不理解为什么这题标记为困难,这就是最简单的把两个递增序列合并成一个递增序列。
最后求一下中位数就好了。
代码:
- class Solution {
- public:
- double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
- vector<int> nums3;
- int i=0;
- int j=0;
- while(i
size()&&jsize()){ - if(nums1[i]
- nums3.push_back(nums1[i]);
- i++;
- }
- else{
- nums3.push_back(nums2[j]);
- j++;
- }
- }
- while(i
size()) - {
- nums3.push_back(nums1[i]);
- i++;
- }
- while(j
size()) - {
- nums3.push_back(nums2[j]);
- j++;
- }
- int w;
- if((nums1.size()+nums2.size())%2==0){
- w=(nums1.size()+nums2.size())/2;
- return (nums3[w-1]+nums3[w])/2.0;
- }
- else{
- w=(nums1.size()+nums2.size())/2;
- return nums3[w];
- }
- }
- };
5. 最长回文子串
题目地址:力扣5
思路:
暴力过不去,所以用了动态规划。
dp[i][j]代表s[i][j]是否是回文数。
首先初始化dp数组,所有dp[i][i]都是1.
当i~j长度为2以及2以内时,只要s[i]==s[j],则它就是回文数,所以dp[i][j]=1.
当长度大于2的时候,我们要看里面的结构,dp[i+1][j-1]是否为1,如果为1说明它里面就是个回文数,比较两端是否相等即可。s[i]==s[j]则dp[i][j]=1。
代码:
- class Solution {
- public:
- string longestPalindrome(string s) {
- if(s.size()==1)return s;
- string c=s.substr(0,1);
- int len=1;
- int st=0;
- int dp[1001][1001];
- memset(dp,0,sizeof(dp));
- for(int i=0;i
length();i++) - {
- dp[i][i]=1;
- }
- for(int i=1;i
length();i++) - {
- for(int j=0;j
- {
- if(s[i]==s[j])
- {
- if(i-j+1<=2)dp[j][i]=1;
- else{
- dp[j][i]=dp[j+1][i-1];
- }
- }
- if(dp[j][i]){
- if(i-j+1>len)
- {
- len=i-j+1;
- st=j;
- }
- }
- }
- }
- return s.substr(st,len);
-
- }
- };
-
相关阅读:
@DateTimeFormat 和 @JsonFormat 的详细研究
Termius for Mac:掌控您的云端世界,安全高效的SSH客户端
机器学习工作岗位
Zookeeper技术精华带领深入详细了解
MATLAB中strjoin函数使用
CSS3零基础快速入门
Web前端:所有新前端开发人员应该具备的顶级技能
前端面试丨综合整理中高级前端最新面试题
数据库-序列
仙人指路,引而不发,Go lang1.18入门精炼教程,由白丁入鸿儒,Golang中New和Make函数的使用背景和区别EP16
-
原文地址:https://blog.csdn.net/Zero_979/article/details/126852537