数组系列01-----二维数组中的查找

题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

该数组不是一般的数组,从左到右递增、从上到下递增意味着每行最后一个最大,每列第一个最小。

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)

后续补C/C++

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值