384. Shuffle an Array
Shuffle a set of numbers without duplicates.
Example:
// Init an array with set 1, 2, and 3. int[] nums = {1,2,3}; Solution solution = new Solution(nums); // Shuffle the array [1,2,3] and return its result. Any permutation of [1,2,3] must equally likely to be returned. solution.shuffle(); // Resets the array back to its original configuration [1,2,3]. solution.reset(); // Returns the random shuffling of array [1,2,3]. solution.shuffle();
//https://discuss.leetcode.com/topic/54022/c-solution-with-fisher-yates-algorithm/6 class Solution { vector<int> arr, idx; public: Solution(vector<int> nums) { srand(time(NULL)); arr.resize(nums.size()); idx.resize(nums.size()); ;i<nums.size();i++){ arr[i] = nums[i]; idx[i] = nums[i]; } } /** Resets the array to its original configuration and return it. */ vector<int> reset() { ;i<arr.size();i++) arr[i] = idx[i]; return arr; } /** Returns a random shuffling of the array. */ vector<int> shuffle() { int i,j; ; i > ; i--) { j = rand() % (i + ); swap(arr[i], arr[j]); } return arr; } };
//C
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> typedef struct { int size; int *BaseNum; int *RandNum; }Solution; Solution* solutionCreate(int* nums, int size) { Solution* solu; solu = (Solution*)malloc(sizeof (Solution)); solu->size = size; solu->BaseNum = (int *)malloc(sizeof(int)*size); solu->RandNum = (int *)malloc(sizeof(int)*size); memcpy(solu->BaseNum, nums, sizeof(int)*size); memcpy(solu->RandNum, nums, sizeof(int)*size); solu->size = size; return solu; } int* solutionReset(Solution* obj,int *returnSize) { return obj->BaseNum; } int* solutionShuffle(Solution* obj,int *returnSize) { int i,j,k; int temp[obj->size]; srand((unsigned int)time(NULL)); j = ; while (j < obj->size) { temp[j] = rand()%obj->size; ;i<j;i++) { if (temp[i] == temp[j]||temp[j] == obj->size) break; } if (i<j) continue; j++; } ;k < obj->size;k++) { //printf ("%d\t",temp[k]); obj->RandNum[k] = obj->BaseNum[temp[k]]; } return obj->RandNum; } void solutionFree(Solution* obj) { if(obj->BaseNum != NULL){ free(obj->BaseNum); obj->BaseNum = NULL; } if(obj->RandNum != NULL){ free(obj->RandNum); obj->RandNum = NULL; } obj->size = ; if(obj != NULL){ free(obj); obj = NULL; } } /** * Your Solution struct will be instantiated and called as such: * struct Solution* obj = solutionCreate(nums, size); * int* param_1 = solutionReset(obj); * int* param_2 = solutionShuffle(obj); * solutionFree(obj); */ int main(void) { //freopen("../tmp", "r", stdin); Solution *st; ]; int size; scanf("%d", &size); //getchar(); ; i < size; ++i) { scanf("%d", &nums[i]); } st = solutionCreate(nums, size); int *p1 = solutionReset(st, &size); printf("the orignal:"); ; i < size; ++i) { printf("%d ", *p1); p1++; } printf("\n"); int *p2 = solutionShuffle(st, &size); printf("after shuffle:"); ; i < size; ++i) { printf("%d ", *p2); p2++; } printf("\n"); if(st != NULL){ solutionFree(st); } ; }
384. Shuffle an Array的更多相关文章
- leetcode 384. Shuffle an Array
384. Shuffle an Array c++ random函数:https://www.jb51.net/article/124108.htm rand()不需要参数,它会返回一个从0到最大随机 ...
- 384. Shuffle an Array数组洗牌
[抄题]: Shuffle a set of numbers without duplicates. Example: // Init an array with set 1, 2, and 3. i ...
- Java [Leetcode 384]Shuffle an Array
题目描述: Shuffle a set of numbers without duplicates. Example: // Init an array with set 1, 2, and 3. i ...
- [LeetCode] 384. Shuffle an Array 数组洗牌
Shuffle a set of numbers without duplicates. Example: // Init an array with set 1, 2, and 3. int[] n ...
- LC 384. Shuffle an Array
Shuffle a set of numbers without duplicates. Example: // Init an array with set 1, 2, and 3. int[] n ...
- 【LeetCode】384. Shuffle an Array 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 库函数 Fisher–Yates 洗牌 水塘抽样 日 ...
- 384. Shuffle an Array(java,数组全排列,然后随机取)
题目: Shuffle a set of numbers without duplicates. 分析: 对一组不包含重复元素的数组进行随机重排,reset方法返回最原始的数组,shuffle方法随机 ...
- 384 Shuffle an Array 打乱数组
打乱一个没有重复元素的数组.示例:// 以数字集合 1, 2 和 3 初始化数组.int[] nums = {1,2,3};Solution solution = new Solution(nums) ...
- [LeetCode] Shuffle an Array 数组洗牌
Shuffle a set of numbers without duplicates. Example: // Init an array with set 1, 2, and 3. int[] n ...
随机推荐
- 如何让网页在浏览器标题栏显示自己制作的图标ico
第一步,制作一个尺寸16x16大小的PNG图片,可以用photoshop等图片处理工具来设计,然后保存到本地电脑上,通过ico在线制作或使用IconWorkshop工具制作ICO图标,ico图标命名为 ...
- javascript高级程序设计---拖拉事件
拖拉事件 拖拉指的是,用户在某个对象上按下鼠标键不放,拖动它到另一个位置,然后释放鼠标键,将该对象放在那里. 拖拉的对象有好几种,包括Element节点.图片.链接.选中的文字等等.在HTML网页中, ...
- .NET Core Preview
.NET Core Preview 这是很容易上手使用.NET Core在您选择的平台上. 你只需要一个命令行,一个文本编辑器和10分钟的时间. 原文链接:https://www.microsoft. ...
- 服务器&域名那些事儿
购买的阿里云的服务器(ECS)和域名 请移步: 服务器&域名那些事儿 服务器&域名那些事儿2 github 博客
- CSS Reset样式重置
为了让页面在各不同浏览器之间显示效果一致,CSS样式清除和重置是前端开发必需要做的事情,结合前车之鉴,整理了份CSS重置样式代码供参考. @charset "utf-8"; /* ...
- java中二进制和流的相互转换
流转二进制 public static byte[] toByteArray(InputStream in) throws IOException { ByteArrayOutputStream ou ...
- css3延时动画
不太理解属性都是什么意思,但是有动画效果,我也是惊呆了 <style> #animated_div{animation:animated_div 4s 1; -moz-animation: ...
- iOS开发——UI进阶篇(十八)核心动画小例子,转盘(裁剪图片、自定义按钮、旋转)图片折叠、音量震动条、倒影、粒子效果
一.转盘(裁剪图片.自定义按钮.旋转) 1.裁剪图片 将一张大图片裁剪为多张 // CGImageCreateWithImageInRect:用来裁剪图片 // image:需要裁剪的图片 // re ...
- tableview侧滑删除
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { ) { retu ...
- phpcms 搜索结果页面栏目不显示解决 方法
头部文件 定义 <?php if(!isset($CATEGORYS)) { $CATEGORYS = getcache('category_content_'.$siteid,'commons ...