array

调整数组顺序使奇数位于偶数前面

本秂侑毒 提交于 2020-02-26 15:36:24
面试题21 :输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 方法一:数组的引用作为实参O(N) class Solution { public : void reOrderArray ( vector < int > & array ) { //需要对数组进行修改,故数组引用组为形参 vector < int > result ; int length = array . size ( ) ; for ( int i = 0 ; i < length ; ++ i ) { if ( array [ i ] & 0x1 == 1 ) result . push_back ( array [ i ] ) ; } for ( int i = 0 ; i < length ; ++ i ) { if ( ( array [ i ] & 0x1 ) == 0 ) //(array[i] & 0x1)此处不加括号则报错 result . push_back ( array [ i ] ) ; } array = result ; } } ; 方法二:使用指针作为形参 class Solution { public : void reOrderArray ( int *

在不删除数组的情况下获取数组最后一个元素的最佳方法是什么?

你离开我真会死。 提交于 2020-02-26 09:37:35
好, 我知道关于 array_pop() 全部知识,但这会删除最后一个元素。 在不删除数组的情况下获取数组最后一个元素的最佳方法是什么? 编辑:这是奖金: $array = array('a' => 'a', 'b' => 'b', 'c' => 'c'); 甚至 $array = array('a', 'b', 'c', 'd'); unset($array[2]); echo $array[sizeof($array) - 1]; // Output: PHP Notice: Undefined offset: 2 in - on line 4 #1楼 避免传递引用错误(例如“ end(array_values($ foo))”)的一种方法是使用call_user_func或call_user_func_array: // PHP Fatal error: Only variables can be passed by reference // No output (500 server error) var_dump(end(array(1, 2, 3))); // No errors, but modifies the array's internal pointer // Outputs "int(3)" var_dump(call_user_func('end',

26. Remove Duplicates from Sorted Array

戏子无情 提交于 2020-02-26 05:58:12
https://leetcode.com/problems/move-zeroes/#/description Given an array nums , write a function to move all 0 's to the end of it while maintaining the relative order of the non-zero elements. For example, given nums = [0, 1, 0, 3, 12] , after calling your function, nums should be [1, 3, 12, 0, 0] . Note: You must do this in-place without making a copy of the array. Minimize the total number of operations. Solution 1 : traverse and swap last(but i think it is the first) 0 and last non 0. class Solution(object): def moveZeroes(self, nums): """ :type nums: List[int] :rtype: void Do not return

选择排序

≯℡__Kan透↙ 提交于 2020-02-26 02:37:49
1.选择排序的基本原理 第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。 2.图解 按从小到大的顺序为例 如图,将整个序列分为有序序列和无序序列。蓝色部分是每次进行比较的内容,将相对小的数字交换到前面;橙色部分则是已排好的序列。 3.代码实现 public static void selectSort(int[] array) { // [0, bound) 已排序区间 // [bound, size) 待排序区间 for (int bound = 0; bound < array.length - 1; bound++) { for (int cur = bound + 1; cur < array.length; cur++) { // 使用打擂台的方式找到待排序区间中的最小值 // bound 位置的元素就是擂台 if (array[bound] > array[cur]) { // 打败擂主, 就和擂主交换 int tmp = array[cur]; array[cur] = array[bound]; array[bound] = tmp; } } } } 来源: 51CTO 作者: Linnnna 链接: https:/

冒泡排序

你说的曾经没有我的故事 提交于 2020-02-26 01:49:28
一、冒泡排序的原理 冒泡排序:将待排序的一组数分为有序区间和无序区间。先在无序区间通过相邻数的比较,将无序区间的最大数依次冒泡到最上面,持续这个过程,直到整组数有序。 二、图解分析 以[3, 0, 5, 4, 1, 2]为例,进行冒泡排序。 第一趟: 从下往上依次两两比较,将最大数交换到最上面,第一趟完成后橙色部分为已排好的部分。 第二趟: 比较方法同上,橙色部分为排好的区间,我们发现有序区间比第一趟的有序区间多一个数。 第三趟: 第四趟: 第五趟: 最后排好的整组数: 我们发现,每次排好序的区间数的个数都比前一趟多一个,所以待排序的6个数共循环了5次。 三、代码实现 public static void bubbleSort(int[] array) { for(int bound = 0; bound < array.length - 1; bound++) { //外层循环(数组长度-1)次 for(int cur = 0; cur < array.length - 1 -bound; cur++) { //内层循环,有序区间不用再循环 if (array[cur] > array[cur + 1]) { int tmp = array[cur]; array[cur] = array[cur + 1]; array[cur + 1] = tmp; } } } } 来源:

排序之堆排序

帅比萌擦擦* 提交于 2020-02-25 23:58:00
排序是将一串数据按照其某个或者某些关键字的大小进行递增或递减排列的操作我,通常指的排序是升序,排序方式是原地排序 下面介绍下堆排序 堆排序 原理: 堆排序也是选择出无序区间的最大值/最小值,将其放在无序区间的后面 但是是通过遍历获取最大值/最小值,是通过建堆的方式来获取无序区间中的最大值/最小值 将堆顶元素和最后一个元素交换,然后对无序区间进行向下调整 重复交换直至排序结束 排升序需要建大堆 排降序需要建小堆 插入排序是一个不稳定的排序 实现方式 1.排升序,建大堆 public static void heapSort(int[] array) { //将数组建成大堆 heapify(array); for(int i = 0; i < array.length - 1; i++) { //交换前 //无序区间[0, array.length - i); //有序区间[array.length - i, array.length); swap(array, 0, array.length - 1 - i); //交换后 //无序区间[0, array.length - i - 1) //有序区间[array.length - i - 1, array.length) //无序区间的长度 array.length - i - 1 siftDown(array, array

数据结构_冒泡排序

一个人想着一个人 提交于 2020-02-25 21:05:23
//冒泡排序 class ArrayList { constructor () { this.array = [] } insert (data) { return this.array.push(data) } tostring () { return this.array.join('-') } bubbleSort () { //获取数组长度 let length = this.array.length let array = this.array for (let i = length-1; i > 0; i--) { for (let j = 0; j < i; j++) { if (array[j] > array[j+1]) { [[array[j]], array[j+1]] = [[array[j+1]], array[j]] } } } return true } } let arr = new ArrayList() arr.insert(9) arr.insert(5) arr.insert(8) arr.insert(0) arr.insert(1) arr.insert(6) arr.insert(4) arr.insert(7) arr.insert(3) arr.insert(2) 来源: https://www.cnblogs.com/JunLan

Numpy基础

可紊 提交于 2020-02-25 19:56:54
一、numpy的属性 import numpy as np 此语法导入了numpy库,并且给numpy起了一个别称np用来方便以后的使用。 下面定义一个矩阵: array = np . array ( [ [ [ 1 , 2 , 3 ] , [ 4 , 5 , 6 ] , [ 7 , 8 , 9 ] ] ] ) print ( array ) 执行: print ( array . ndim ) 可以查询到矩阵,输出结果为3。还有一些操作如下: print ( array . shape ) #输出矩阵形状 print ( array . size ) #输出矩阵大小 print ( array . dtype ) #显示矩阵的元素类型 二、创建array import numpy as np a = np . array ( [ 1 , 2 , 3 ] , dtype = np . int32 ) #创建一个内容为1,2,3,数据类型为整形32位的数组 print ( a . dtype ) 创建一个二维矩阵,注意中括号数目: d = np . array ( [ [ 1 , 2 , 3 ] , [ 4 , 5 , 6 ] ] ) #创建一个二维矩阵 print ( d ) 生成一个2行3列的零矩阵: zero = np . zeros ( ( 2 , 3 ) ) print (

插入排序

。_饼干妹妹 提交于 2020-02-25 19:01:29
1.什么是直接插入排序 依次将待排序中的数字直接插入到已按从小到大(或者从大到小)排好的序列中去,直到插完所有数字为止。 2.图示表示 3.代码实现 public static void insertSort(int[] array) { for (int bound = 1; bound < array.length; bound++) { int tmp = array[bound]; int cur = bound - 1; //[1,bound)为排序好的,[bound,array.length)是待排序的 for (cur = bound - 1; cur >= 0; cur--) { if (array[cur] > tmp) { array[cur + 1] = array[cur]; } else { break; } } array[cur + 1] = tmp; } } 来源: 51CTO 作者: Linnnna 链接: https://blog.51cto.com/14298563/2470120

Python Numpy 数组扩展 repeat和tile

假如想象 提交于 2020-02-25 19:00:21
numpy.repeat 官方文档 numpy.repeat(a, repeats, axis=None) Repeat elements of an array. 可以看出repeat函数是操作数组中的每一个元素,进行元素的复制。 例如: >>> a = np.arange(3) >>> a array([0, 1, 2]) >>> np.repeat(a, 2) array([0, 0, 1, 1, 2, 2]) >>> a = [[0,1], [2,3], [4,5]] >>> y = np.repeat(a, 2) >>> y array([0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5]) numpy.tile 官方文档 numpy.tile(A, reps) Construct an array by repeating A the number of times given by reps. 可以看出tile函数是将数组A作为操作对象 例如: >>> a = np.array([[1,2],[3,4]]) >>> a array([[1, 2], [3, 4]]) >>> np.tile(a, 2) array([[1, 2, 1, 2], [3, 4, 3, 4]]) >>> a = [[0,1], [2,3], [4,5]] >>> x =