leetcode array
来源:互联网 发布:生物制药就业前景知乎 编辑:程序博客网 时间:2024/06/06 01:08
- Maximum Swap
题目大意就是最多交换一次使数字最大。
本来以为只要找出最大值,然后和首位交换即可,但是忘记考虑如果首位是最大就要考虑第二大和第二位交换..第三大第四大等等,最后想干脆直接排个序得了,这样不用每次循环遍历找大的,但是其实这个题目最大只有8位,循环遍历找最大的时间比直接排好序直接取的时间要短。另发现可以直接用to_string(num)就把num转成string可以直接操作了,而不用vector一位位取。在此附上自己本来的方法,及看别人代码学习的方法。
原始的,6ms
class Solution {public: int maximumSwap(int num) { int nnum=num; vector<int> vnum; vector<int> snum; int i=0; while(num) { vnum.push_back(num%10); snum.push_back(num%10); num/=10; i++; } sort(vnum.begin(),vnum.end()); cout<<vnum[i-1]; i=vnum.size(); while(snum[i-1]==vnum[i-1]&&i>0) { i--; } if(i==0) return nnum; if(snum[i-1]!=vnum[i-1]) { for(int j=0;j<i-1;j++) if(snum[j]==vnum[i-1]) { snum[j]=snum[i-1]; snum[i-1]=vnum[i-1]; } } num=0; for(int j=snum.size()-1;j>=0;j--) { num=num*10+snum[j]; } return num; }};
别人的,3ms
int maximumSwap(int num) { string numString = to_string(num); int n = numString.length(); vector<int> dpPosition(n, -1); int curMaxPos = n - 1; for (int i = n - 1; i >= 0; i--) { if (numString[i] > numString[curMaxPos]) { curMaxPos = i; } dpPosition[i] = curMaxPos; } for (int i = 0; i < n; i++) { if(numString[dpPosition[i]] != numString[i]) { swap(numString[i], numString[dpPosition[i]]); break; } } return stoi(numString);}
学习后写的 3ms
class Solution {public: int maximumSwap(int num) { string snum=to_string(num); int size=snum.length(); int j=0; int max=0; for(int j=0;j<size-1;j++) { max=j; for(int i=j+1;i<size;i++) { if(snum[i]>=snum[max]) max=i; } if(max!=j&&snum[max]!=snum[j]) { swap(snum[max],snum[j]); break; } } return stoi(snum); }};
这种方法开始在 if(snum[i]>=snum[max]) 只是>时就提交错误,1993 我输出的就是9193 而正确答案应该是9913。这里的问题是找最大值找到第一个就停了,其实应该找靠后的最大值,忽略了有值相同的情况。这个以后也要注意
第一种方法没这个问题是因为找最大是倒着找的,正好找到了靠后的最大值,而不是自己考虑到了,这个注意。
阅读全文
0 0
- [leetcode][array] Rotate Array
- LeetCode:Array
- Array-Leetcode
- Array-Leetcode
- Array-Leetcode
- Array-Leetcode
- Array-Leetcode
- Array-Leetcode
- Array-Leetcode
- Array-Leetcode
- Array-Leetcode
- Array-Leetcode
- Array-Leetcode
- LeetCode Array
- Leetcode-array
- leetcode array
- [leetcode]Array
- Leetcode - Array - Merge Sorted Array
- Linux Shell 脚本编程(3)—Shell输入与输出
- 黑客入侵
- 嵌入式C语言面试题
- 111
- 算法设计与分析笔记之(8):NP问题
- leetcode array
- 查找单链表中倒数第k个元素
- linux命令之grep的-o选项
- Java加密解密之消息摘要
- vue的常用指令
- toString的用法
- 虚函数实现原理
- Css学习总结(5)——CSS常见布局方式
- Mongoose中间件入门示例