![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
莫小可可
啦啦啦啦啦啦~
展开
-
(剑指offer)JZ6 从尾到头打印链表(1)
/*** struct ListNode {* int val;* struct ListNode *next;* ListNode(int x) :* val(x), next(NULL) {* }* };*/class Solution {public: vector<int> printListFromTailToHead(ListNode* head) { .原创 2022-02-27 21:33:38 · 308 阅读 · 0 评论 -
二分法(2)力扣刷题
class Solution {public: bool Find(int target, vector<vector<int> > array) { int len1 = array.size(); for(int i = 0;i < len1;i++){ int len2 = array[0].size(); int left = 0; int right =.原创 2022-02-26 12:55:20 · 218 阅读 · 0 评论 -
二分法(1)力扣刷题
class Solution {public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @param target int整型 * @return int整型 */ int search(vector<int>& nums, int target) { // write.原创 2022-02-26 12:54:22 · 136 阅读 · 0 评论 -
实现Sqrt函数并结果进行向下取整
public class Solution { public int sqrt(int x) { // 注意:特殊用例判断 if (x == 0) { return 0; } if (x < 4) { return 1; } int left = 0; int right = x / 2; while (left .原创 2021-09-11 11:24:39 · 1025 阅读 · 0 评论 -
寻找最大公共子数组和最大公共字符串
解决方法:使用遍历法,从0开始遍历完整个数组或者字符串,可以使用unoder_map进行比较,如果从i开始,一直添加元素,记录无重复的个数,如果遇到有重复的就把map清零,然后从i+1处继续继续上面步骤,最终比较可以得到最大的长度...原创 2021-09-11 10:15:59 · 116 阅读 · 0 评论 -
力扣9题——回文数判断
思路:暴力法解决,没有用到字符串,用到了数组class Solution {public: bool isPalindrome(int x) { if(x<0) { return false; }else{ if(x==0) { return true; }else{ int s[原创 2021-08-08 20:04:48 · 99 阅读 · 0 评论 -
力扣724题——寻找数组的中心下标
思路:暴力法int pivotIndex(int* nums, int numsSize){ int temp1=0; int temp2=0; for(int i=0;i<numsSize;++i) { for(int j=0;j<i;++j) { temp1=temp1+nums[j]; } for(int原创 2021-08-07 13:39:40 · 158 阅读 · 0 评论 -
力扣88题——合并两个有序数组
思路:暴力法,对这两个数组进行遍历比较值然后赋值给另外一个数组nums3,最后再把nums3的值赋值给nums1void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){ int i=0; int j=0; int k=0; int nums3[nums1Size]; while((i!=m)&&(j!=n)) { if(原创 2021-08-07 13:17:53 · 149 阅读 · 0 评论 -
力扣27题——移除元素
题目描述:给你一个数组nums和一个值val,你需要原地移除所有数值等于val的元素,并返回移除后数组的新长度int removeElement(int* nums, int numsSize, int val){ int i; int* p=nums; int n=0; for(i=0;i<numsSize;i++) { if(p[i]!=val) {...原创 2021-08-07 11:25:49 · 104 阅读 · 0 评论 -
力扣53题——求数组的最大子序和
思路:暴力法,两次历遍数组int maxSubArray(int* nums, int numsSize){ int i,j; int temp=0; int max=nums[0]; for(i=0;i<numsSize;i++) { temp=0; for(j=i;j<numsSize;j++) { temp=temp+nums[j]; if(t原创 2021-08-07 11:09:19 · 126 阅读 · 0 评论 -
剑指offer27题——回文链表的判断
思路:先找到链表的中间节点,如果有两个节点的话应该是第二个节点为中间节点,然后将后半部分链表进行反转,最后再与前一部分链表进行比较,如果相同,则为回文链表/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(原创 2021-08-07 10:33:01 · 91 阅读 · 0 评论 -
力扣141题——环形链表(一)
思路:使用快慢指针法,快指针走两步,慢指针走一步,如果链表有环则两者一定会相遇/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(i原创 2021-08-07 10:03:57 · 109 阅读 · 0 评论 -
剑指offer024题——反转链表
思路:设置多个指针,其中指针mid的操作为把当前的后一个指针赋值给指针L,再把自己的指针指向指向指针F,然后把指针L赋值给mid,再把mid赋值给F,这样过后,只要历遍整个链表,F指针就是最后一个指针而且指针的指向与原来的链表相反,达到了反转链表的目的/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0原创 2021-08-07 09:39:08 · 83 阅读 · 0 评论 -
力扣876题——返回链表中间的节点(2)
题目描述:给定一个头结点为head的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第一个中间结点。示例:输入:[1,2,3,4,5,6]输出:此列表中的结点 4 (序列化形式:[4,5,6])由于该列表有两个中间结点,值分别为 3 和 4,我们返回第一个结点。思路:采用(双指针)快慢指针,快指针走两步,慢指针走一步,大家可以画图模拟一下,第一种情况,如果要返回的中间节点只有一个,则判断条件为当前快指针不为空而且当前快指针的下一个指针也不能为空;第二种情况,如果返回的中间节..原创 2021-08-06 21:29:10 · 181 阅读 · 0 评论 -
力扣876题——返回链表中间的节点(1)
题目描述:给定一个头结点为head的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。示例:输入:[1,2,3,4,5,6]输出:此列表中的结点 4 (序列化形式:[4,5,6])由于该列表有两个中间结点,值分别为 3 和 4,我们返回第二个结点。思路:采用(双指针)快慢指针,快指针走两步,慢指针走一步,大家可以画图模拟一下,第一种情况,如果要返回的中间节点只有一个,则判断条件为当前快指针不为空而且当前快指针的下一个指针也不能为空;第二种情况,如果返回的中间节..原创 2021-08-06 21:25:00 · 112 阅读 · 1 评论 -
找到链表中倒数第K个元素——快慢指针法
剑指offer22题——找到链表中倒数第K个元素,使用了快慢指针法思路:先让快指针走K步,然后两个指针同时走,直到快指针走到头,慢指针所指的元素就是第K个元素/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solutio原创 2021-08-06 21:05:10 · 131 阅读 · 0 评论 -
单链表中删除重复节点——双指针法
力扣面试题——单链表中删除重复节点C++使用双指针法解决/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode* removeDuplicateNodes(List原创 2021-08-06 20:47:38 · 173 阅读 · 0 评论 -
C++实现单链表(一)
链表是最常用的数据结构,下文开始使用C++实现单链表以及关于单链表的各种操作本文给出链表类的定义,具体定义后文会推出#include<iostream>using namespace std; typedef int DataType;#define Node ElemType#define ERROR NULL //构建一个节点类class Node {public: int data; //数据域原创 2021-08-06 18:44:09 · 222 阅读 · 0 评论