Leetcode 448 线性时间算法
来源:互联网 发布:php 循环拼接字符串 编辑:程序博客网 时间:2024/06/07 20:48
Leetcode 448 线性时间算法
想到的办法是以每个下标index代表index+1的状态,从头扫过去,每遇到一个元素时将这个元素暂存为curr,将此元素的位置上置空(-3表示)表示暂时这个位置对应的元素缺失,然后跳转到curr-1处,将此处置为存在(以-1表示),并将原来的在curr-1的位置上的元素存入curr中,重复执行直到遇到了负数或者curr=nums[curr-1],break出去之后再往下扫。
#include<stdio.h>#include<vector>#include<iostream>using namespace std;class Solution {public: vector<int> findDisappearedNumbers(vector<int>& nums) { //has:-1,empty:-2,not has:-3 int length = nums.size(); int curr; for(int i=0;i<length;i++) { if(nums[i]<0) continue; curr = nums[i]; nums[i] = -3; if(nums[curr-1]==curr) { nums[curr-1] = -1; continue; } while(nums[curr-1]!=curr) { if(nums[curr-1]<0) { nums[curr-1] = -1; break; } int old_index = curr-1; curr = nums[curr-1]; nums[old_index] = -1; } } vector<int> ans; for(int i=0;i<length;i++) { if(nums[i]==-3) ans.push_back(i+1); } return ans; }};int main(){ vector<int> v({4,3,2,7,8,2,3,1}); Solution s; vector<int> ans = s.findDisappearedNumbers(v); //cout<<'\n'; for(int i=0;i<ans.size();i++) cout<<ans[i]<<' '; return 0;}
阅读全文
0 0
- Leetcode 448 线性时间算法
- 线性时间选择算法
- 线性时间选择算法
- 线性时间选择算法
- 线性时间排序算法
- 线性时间Huffman算法
- 算法-线性时间排序
- 线性时间选择算法
- 线性时间选择算法
- 算法 线性时间排序算法
- 线性时间复杂度排序算法
- 算法时间复杂度-线性阶
- 线性时间的排序算法
- 线性时间排序-算法导论
- 线性时间查找中位数算法
- 线性时间选择算法Randomized_Select
- 线性时间的选择算法
- 算法导论--线性时间排序
- ZOJ
- eclipse中查看jar包中的源码
- BRD、MRD 和 PRD
- 最小生成树
- zoj1093 Monkey and Banana 动态规划
- Leetcode 448 线性时间算法
- mysql 使用in()函数时的一个注意事项
- C++强制类型转换操作符 static_cast
- abstract与static、synchronized、native不能同时使用的原因
- 使用CSS和Js实现时钟效果
- SQL中distinct和row_number() over() 的区别及用法
- 字符串是否包含
- 什么是constrained MD
- dubbo使用logback来输出日志