![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++数据结构与算法
机器猫的小蜗牛
这个作者很懒,什么都没留下…
展开
-
链表的相加c++
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/add-two-numbers著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。这个题主要就是模拟加法运算,有进位时,记得原创 2020-11-14 20:44:19 · 368 阅读 · 0 评论 -
在一个从左到右,从上到下递增的数组中找到给定的数值
如题[[1,2,3],[3,4,5]]对于这种如果暴力搜索肯定超时,观察数组特征,从左下角开始,1=行数-1,j=0,如果target大于当前值,则列指针向右走,j++,如果target小于当前值,行指针向上走i–#include <iostream> #include <vector>using namespace std;bool findTarget(vector<vector< int>>& v,int target){原创 2020-11-09 22:25:58 · 2689 阅读 · 0 评论 -
c++ 数组实现队列
#include <stdio.h>#include<stdlib.h>#include<iostream>const int N=1024;template <typename T>class queue{ public: int first;//对头 int last;//队尾 int num;//数组元素的个数 T A[N]; queue(){ first=0; last=0; num=0; } public:原创 2020-11-08 17:40:24 · 227 阅读 · 0 评论 -
求一个字符串的全排列,剑指offer, tx问过这道题
对于求全排列的这种问题,一般使用暴力求解,常用的就是回溯算法def permutation(s,i): if(len(s)==i): print(s) else: for j in range(i,len(s)):#当前字符与后面的每个字符进行交换 s[i],s[j]=s[j],s[i] permutation(s, i+1) s[i],s[j]=s[j],s[i]#回溯原创 2020-11-02 10:16:20 · 107 阅读 · 0 评论 -
有序数组中找两个数a,b,给定sum 使得sum=a+b,a*b最小,某大厂面试题
例如 1,2,3,4,5,6,8,9 给定5,可以找到2+3=5,1+4=5,而1*4=4最小,故返回下标0,3因为数组有序,一般会考虑到二分查找,具体算法如下def find1(arr,s): if len(arr)<=2: print("input error") exit() min=10000000 index1=-1 index2=-1 low=0 high=len(arr)-1 while(l原创 2020-11-02 10:00:42 · 218 阅读 · 0 评论 -
两个链表相加求和,python实现,某大厂的面试题
题目:输入两个链表,形如1->2->3,9->2 输出0->5->3,其中输入不会以开始思路:每位相加,有进位,累加到下一位class Node: def __init__(self,x): self.val=x self.next=Nonedef addTwoList(l1,l2): sum=0 temp=0 h=p=Node(0) while l1 or l2: .原创 2020-10-29 10:07:07 · 585 阅读 · 0 评论 -
求有序数组中两数之和为s,并且使得两数之积最小的两个数字
# -*- coding: utf-8 -*-"""Created on Tue Sep 15 19:02:55 2020@author: """#递增排序数组,给出一个s,找出两个数字相加等于s,如果有多对,输出乘积最小的#有序# a+b=s,使得a*b=min a=s-b#暴力def find(arr,s): if len(arr)<=2: print("input error") exit() min=10000000 .原创 2020-09-16 20:12:49 · 230 阅读 · 1 评论 -
c++斐波那契非递归
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1)。n<=39从第三项开始,循环往后计算,每一项等于前两项之和c=a+b;然后第二项等于第三项a=b,第三项等于第四项b=c;class Solution {public: int Fibonacci(int n) { if (n==0) return 0; if (n==1||n==2) retu原创 2020-08-05 22:37:16 · 360 阅读 · 0 评论 -
c++ 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。
class Solution {public: ListNode* EntryNodeOfLoop(ListNode* pHead) { if(pHead==NULL) return NULL; ListNode* L=pHead; ListNode* R=pHead; bool flag=false; while(L->next!=NULL&&R->next原创 2020-08-03 22:12:44 · 173 阅读 · 0 评论 -
求数组中最长连续子数组
给定一个未经排序的整数数组,找到最长且连续的的递增序列,并返回该序列的长度。输入: [1,3,5,4,7]输出: 3解释: 最长连续递增序列是 [1,3,5], 长度为3。尽管 [1,3,5,7] 也是升序的子序列, 但它不是连续的,因为5和7在原数组里被4隔开。class Solution {public: int findLengthOfLCIS(vector<int>& nums) { int max=0; int count=原创 2020-07-19 18:07:48 · 2097 阅读 · 0 评论 -
c++旋转数组中查找目标数
假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是 O(log n) 级别https://leetcode-cn.com/explore/interview/card/bytedance/243/array-and-sorting/1017/刚开始写了个递归的,原创 2020-07-19 17:01:05 · 285 阅读 · 0 评论 -
c++链表求和
力扣题目https://leetcode-cn.com/explore/interview/card/bytedance/244/linked-list-and-tree/1022/给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。输入:(2 -> 4 -> 3) + (5 -&g原创 2020-07-12 20:41:52 · 715 阅读 · 0 评论 -
c++ 实现简易的单链表,以及反转,找到倒数第k个节点
#ifndef __LINKLSIT_H__#define __LINKLSIT_H__class Node{public: int data; Node* next; Node() { next=NULL; } Node(int d, Node* n=NULL) { data=d; next=n; }};class LinkList{public: LinkList();原创 2020-07-04 18:55:46 · 140 阅读 · 0 评论 -
c++二分查找算法
二分查找1,数据必须为有序数列2,查找过程设置两个指针,low,high, 如果目标数据大于low和high中间的数,则low=mid+1, 如果目标数据小于low和high中间的数,则high=mid-1,之后个更新mid=(low+high-1)/2#include <iostream>#include <math.h>using namespace std;int binarySearch(int *array,int len,int target){//返回目原创 2020-07-02 21:41:34 · 201 阅读 · 0 评论