题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
该数组不是一般的数组,从左到右递增、从上到下递增意味着每行最后一个最大,每列第一个最小。
Python
# -*- coding:utf-8 -*-
# class表示一个类,定义一个类。self.xx意味着此变量或者常量是全局的。
class Solution:
# array 二维列表
def Find(self, target, array): # 定义一个函数
#首先我们先了解此数组的行数和列数
row = len(array)
col = len(array[0])
#然后声明变量
i, j = 0, col - 1
while i < row and j >-1: #变量的边界
if target > array[i][j]:#情况
i += 1
elif target < array[i][j]:
j -= 1
else:
return True
return False
C/C++
/*class是声明一个类,以;结尾 */
class Solution {
public:/*表示公开的*/
/*在C/C++中,每个函数应该确定其类型。下面的函数中,bool表示布尔型*/
//在Python中,数组可以直接表示为array[][]的形式;
//与Python不同,在C/C++中,vector<type>表示一维数组。
//type表示数组类型;vector<vector<int>>表示int型的二维数组
bool Find(int target, vector<vector<int> > array) {
if(array.empty()) return false; // 可以发现,if语句的格式与Python也不同,if() return;
if(array.size()!=0){
int row = array.size();
int col = array[0].size()-1;
int i = 0;
int j = col;
while( i<row and j>-1){
//可以发现,多个条件判断,是if else if else的形式,并不是if elif else的形式
if(target>array[i][j])
++i;
else if(target<array[i][j])
--j;
else
return true;
}
return false;//要跳出while的循环即跳出while{},不可在while内return
}
}
}; //类以;结尾,函数不用
另一个题:小米2019秋招测试开发笔试题(A)
输入一个无序整数数组,调整数组中数字的顺序, 所有偶数位于数组的前半部分,使得所有奇数位于数组的后半部分。
要求时间复杂度为O(n)。
输入描述:
给定无序数组。
长度不超过1000000。
输出描述:
所有偶数位于数组的前半部分,所有奇数位于数组的后半部分。
如果有多个答案可以输出任意一个正确答案。
输入例子1:
2 4 5 7 8 1
输出例子1:
2 4 8 7 5 1
很显然,python的比较简单,我们可以先写Python的。
Python–第一种方案
class Solution:
def move_di(array):
if len(array)==0:
return None
if len(array)==1:
return array
num = len(array)
tmp_o = []
tmp_j = []
for i in range(num):
if array[i]%2==0:
tmp_o.append(array[i])
else:
tmp_j.append(array[i])
return tmp_o+tmp_j
import sys
line = sys.stdin.readline()
array = list(map(int, line.split()))
a = Solution.move_di(array)
c = ' '.join(str(i) for i in a)
print(c)