头像
无味_9
这个人很神秘,什么都没有写

IP属地:河南


最近来访(2)
用户头像
MichaelCorleone
用户头像
pxpacy

新鲜事 原文

无味_9
11小时前 ·河南
### 你真的会算`8/5`吗? 今天看算法竞赛入门经典时发现的,第二页就碰到这个问题了🙃🙃🙃#C编译器 #C++基础语法 #C++
图片 图片 图片
AcWing 756. 蛇形矩阵

无味_9
1天前 ·河南

y总方法详细注释版

//模拟
#include<iostream>
using namespace std;

int arr[110][110];
//数组开在堆上,初始值全为0

int main()
{
    int n ,m;
    cin >> n >> m;
    int res=1;//待填充的值,也是遍历次数的判断条件
    int x=0, y=0;//待填充坐标
    int dir_x[]={0, 1, 0, -1}, dir_y[]={1, 0, -1, 0};//决定x,y往哪个地方走
    int index=0;//dir_x、dir_y的下标,表明下一个待填充的位置怎么走。通过下标决定下一个填充位置的方向

    for(res=1; res<=n*m; res++)
    {
        arr[x][y] = res;
        int i=0, j=0; //用来临时存储坐标,防止有效坐标被更改
        //使用i,j来测试下一个有效坐标在哪里,是否需要转向
        i = x + dir_x[index];
        j = y + dir_y[index];
            //判断i, j是不是有效坐标;这里可以画图模拟一遍!
        if(i<0||i>=n || j<0||j>=m || arr[i][j])
        {
            //到这里就代表i,j不是有效坐标,需要转向
            index = (index+1)%4;//让index一直在数组中循环0~3
            //更新正确的i,j
            i = x + dir_x[index];
            j = y + dir_y[index];
        }
        x = i;
        y = j;
    }

    //output
    for(int i=0; i<n; i++)
    {
        for(int j=0; j<m; j++)
        {
            cout << arr[i][j] << " ";
        }
        cout << endl;
    }



    return 0;
}
AcWing 756. 蛇形矩阵

无味_9
1天前 ·河南
//模拟
#include<iostream>
using namespace std;

int arr[110][110];
//数组开在堆上,初始值全为0

int main()
{
    int n ,m;
    cin >> n >> m;
    int res=1;//待填充的值,也是遍历次数的判断条件
    int x=0, y=0;//待填充坐标
    int dir_x[]={0, 1, 0, -1}, dir_y[]={1, 0, -1, 0};//决定x,y往哪个地方走
    int index=0;//dir_x、dir_y的下标,表明下一个待填充的位置怎么走。通过下标决定下一个填充位置的方向

    for(res=1; res<=n*m; res++)
    {
        arr[x][y] = res;
        int i=0, j=0; //用来临时存储坐标,防止有效坐标被更改
        //使用i,j来测试下一个有效坐标在哪里,是否需要转向
        i = x + dir_x[index];
        j = y + dir_y[index];
            //判断i, j是不是有效坐标
        if(i<0||i>=n || j<0||j>=m || arr[i][j])
        {
            //到这里就代表i,j不是有效坐标,需要转向
            index = (index+1)%4;//让index一直在数组中循环0~3
            //更新正确的i,j
            i = x + dir_x[index];
            j = y + dir_y[index];
        }
        x = i;
        y = j;
    }

    //output
    for(int i=0; i<n; i++)
    {
        for(int j=0; j<m; j++)
        {
            cout << arr[i][j] << " ";
        }
        cout << endl;
    }



    return 0;
}
AcWing 17. 从尾到头打印链表

无味_9
8天前 ·河南

一、使用栈容器

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution 
{
public: // 最先想到的思路就是栈
    vector<int> printListReversingly(ListNode* head) 
    {
        stack<int> s;
        vector<int> vec; //用来返回结果
        //遍历链表,节点值入栈
        for(ListNode* i=head; i!=NULL; i=i->next)
            s.push(i->val);
        //出栈入vector
        while(!s.empty())
        {
            vec.push_back(s.top());
            s.pop();
        }
        return vec;
    }
};
AcWing 32. 调整数组顺序使奇数位于偶数前面

无味_9
8天前 ·河南

一、申请两个数组来辅助存储

class Solution 
{
public:
    void reOrderArray(vector<int> &array) 
    {
        //申请两个数组来分别存储奇数、偶数     
        int arr1[100], arr2[100];
        int m=0, n=0;
        for(int i=0; i<array.size(); i++)
        {
            if(array[i]%2 != 0)
                arr1[m++] = array[i];
            else
                arr2[n++] = array[i];
        }
        //现在拿到的m,n都是数组中最后一个元素的下一个位置
        //把arr2拷贝到arr1的后半部分
        for(int i=0; i<n; i++)
            arr1[m+i]=arr2[i];
        //再把arr1全部拷贝到array里面
        for(int i=0; i<array.size(); i++)
            array[i] = arr1[i];

    }
};
AcWing 68. 0到n-1中缺失的数字

无味_9
8天前 ·河南

一、哪里漏水补哪里。不断提交试错,直到枚举所有情况【🐶】

class Solution {
public:
    int getMissingNumber(vector<int>& nums) {
        if(nums.empty()==true)
            return 0;
        if(nums[0]==0 && nums.size()==1)
            return 1;
        int i=0;
        for(i=0; i<nums.size(); i++)
        {
            if(i!=nums[i])
                return i;
        }
        if(i==nums.size())
            return i;
    }
};

二、二分性解题,不断二分找到最终值

//这种方法一定要把图画清晰!不然很绕

class Solution 
{
public:
    int getMissingNumber(vector<int>& nums) 
    {
        //二分法,有两段,每段符合的条件不一样
        //特派情况一、穿进来的是空数组
        if(nums.empty()) return 0;
        //特派情况二、一整段都是符合的,缺少的那个元素是末尾的(最大的那个)
        //有(n-1)=size()个元素,最大下标是size()-1=n-2,
        //按照这种情况二,最大下标处对应的值也应该是size()-1=n-2
        //但是每个下标位置的取值范围是[0~n-1]
        if(nums.size()-1 == nums.back()) return nums.size();

        //缺失的点在中间,二段性成立,使用二分法求下标值,因为缺失的元素可以在下标中找到
        int left=0, right=nums.size()-1;
        while(left < right)
        {
            int mid = (left+right) >> 1; //右移一位相当于除2
            if(nums[mid] != mid)
                right=mid; // 说明mid在元素值和下标不相等的第二段处,把右边界挪到mid处
            else
                left = mid+1; 
            // 下标和元素值相等,肯定不是我要找的元素,挪边界的时候多挪一个
        }
        return right; //这里写left和right都一样
    }
};
AcWing 36. 合并两个排序的链表

无味_9
12天前 ·河南
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution 
{
public://还是双指针
    ListNode* merge(ListNode* l1, ListNode* l2) 
    {
        ListNode * head = new ListNode(-1);

        ListNode * tail = head;
        while(l1 && l2)
        {
            if(l1->val < l2->val)
            {
                tail->next = l1;
                tail = tail->next;
                l1 = l1->next;
            }
            else
            {
                tail->next = l2;
                tail = tail->next;
                l2 = l2->next;
            }
        }

        if(l1!=NULL) tail->next = l1;
        if(l2!=NULL) tail->next = l2;

        return head->next;
    }

};
AcWing 28. 在O(1)时间删除链表结点

无味_9
12天前 ·河南
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution 
{
public:
    void deleteNode(ListNode* node) 
    {
        node->val = node->next->val;
        node->next = node->next->next;
        //用该节点后面的一个节点全面覆盖该节点,达到输出目的
        //但是实际上删除的并不是该节点,而是屏蔽跳过了该节点后面的那个节点
        //画图便一目了然
    }
};
AcWing 84. 求1+2+…+n

无味_9
12天前 ·河南
class Solution 
{
public:
    int getSum(int n) 
    {
        int ans=n;
        n>0 && (ans += getSum(n-1));

        return ans;
    }

};
AcWing 78. 左旋转字符串

无味_9
12天前 ·河南

一、库函数版本

class Solution {
public:
    string leftRotateString(string str, int n) 
    {
        string a = str.substr(0, n);
        str.erase(0, n);
        str += a;
        return str;
    }
};

二、手动循环实现翻转

class Solution 
{
public:
    string leftRotateString(string str, int n) 
    {
        while(n--)
        {
            char temp = str[0];
            for(int i=1; i<str.size(); i++)
                str[i-1]=str[i];
            str[str.size()-1] = temp;
        }
        return str;
    }
};

京ICP备2021015969号-2

相关内容推荐

快搜搜题一兜糖官网歌词编辑器更改盘符w浏览器族库大师官网吾爱破解app小米刷机助手八一影院音效助手迅捷pdf转换器四虎三级cad黑白打印asp服务器oligo基金定投计算器远程工具使命召唤系列下载喔刷pos小白一键重装Sanse英特尔xtu扫描仪软件转换大师解压器桌面小组件爱普生扫描仪飞常准app简谱生成器yy游戏雷蛇驱动官网管家婆软件笔神简单搜索永无广告竹马法考网页版携程app下载freemove云计价怎么更改文件类型清爽视频编辑系统日志在哪里看神无月企业手机银行电脑压缩软件安装程序制作泡泡龙番茄修改器充电软件空洞骑士修改器当贝应用市场尤里复仇地图失落星球51游戏米米号八哥手机shuoshu鬼泣5汉化补丁在线解压缩cf自瞄极速浏览器m6506qsv是什么格式ppt备注手机数据恢复大师i苹果助手listen1票圈视频base64转vs对战平台下载圈粉tv坦克世界战绩七鲜慕课下载ai换脸下载黑暗神庙GRUB2汇博人才市场广东干部网络培训兽人必须死2下载手机淘宝下载圣安地列斯联机智量安全汇金谷我欲修真cad制图鼠标自动点击飞猪APP御剑仙缘cad素材库吾爱视频航天税控盘徐州市地图全图三国立志传3办公软件免费版仙剑奇侠传单机版种子狗哈弗智家app下载招商银行金士顿u盘修复网络助手绝命时刻下载iexplore衣邦人外网下载手机电视万能遥控备份系统小白系统一键重装快手一键取关百度网盘离线下载poco美人相机去水印全能王下载龙江人社视频播放器下载请出示证件乐涂数字填色下载布丁酒店官网小米root酷狗音乐车载版中国地图高清版拳皇mugen格式化工厂绿色版改ip地址91影51虚拟机baidu电影qq有些下载浏览器并安装360好压scp游戏下载代练妈妈下载奈菲影视模拟手术北通驱动希沃白板软件下载远程工具马赛克去除工具游戏园荒岛求生2大象电影院火龙果软件地狱潜者复制粘贴软件圣安地列斯热咖啡恶整小偷百度地图导航下载薄荷阅读微信运动计步器够快云库小黄人软件刷题神器街头霸王4下载水印去除软件电脑练字软件狗狗语言翻译器axure8战神遗迹量产工具口袋妖怪白22007wordc盘根目录企业手机银行番号资源美食大战老鼠枫叶星际争霸免费下载qq修改器荒岛求生2窗口置顶工具完美下载帆软软件中药材诚实通千恋万花下载重名查询全国系统uc视频涂山红红头像黑暗之魂重制版远方文学韩国天堂乐课力造梦无双破解版查看数据库gbc游戏下载小键盘练习桌面日历下载龙腾传世手游旺旺app1688商家版易语言教程宏业软件官网dj水晶网共享wifi送货单打印软件Goliath新手学电脑入门财通证券股票行情忆捷b450软件建模同城票据下载大鱼吃小鱼杜比atmos

站外内容推荐